Listenelement, Datei in Spalten einlesen = Problem :)



  • hi,

    ich habe ein Listenelement in dem ich in

    OnInit
    

    erst die Spalten
    festlege, und dann den Inhalt einer Datei einlese.

    in meiner Datei sind die Einträge so aufgebaut:

    spalte1,,spalte2,,spalte3
    spalte1,,spalte2,,spalte3
    spalte1,,spalte2,,spalte3
    ...

    nun möchte ich das beim einlesen der Datei auch das alle Spalten gefüllt werden
    mit meinem Code wird immer nur die Spalte1 von meinem Listenelement gefüllt:

    Hir ist mein Code:

    BOOL CMyDialog::OnInitDialogBar()
    {
    	CMyDialog::OnInitDialogBar();
    
        m_List.InsertColumn ( 0, "", LVCFMT_CENTER, 155 );
    
    	m_List.InsertColumn ( 0, "Spalte1", LVCFMT_CENTER, 54 );
    	m_List.InsertColumn ( 1, "Spalte2", LVCFMT_CENTER, 38 );
    	m_List.InsertColumn ( 2, "Spalte3", LVCFMT_CENTER, 48 );
    	m_List.InsertColumn ( 3, "Spalte4", LVCFMT_CENTER, 35 );
    
    		m_List.DeleteAllItems();  	
    
          CStdioFile myFile("c:\\daten.dat", CFile::modeReadWrite); 
          CString str = "";       
    
          while(myFile.ReadString(str))//das File wird zeilenweise Ausgelesen 
          { 
          m_List.InsertItem(0,str); 
          m_List.SetItemText(0,1, ??); 
          m_List.SetItemText(0,2, ??); 
          m_List.SetItemText(0,3, ??);
          } 
          myFile.Close();  
    
    	return TRUE;
    }
    


  • So, nun habe ich rausgefunden wie ich die anderen Spalten fülle.

    mit

    m_List.InsertItem(0,str);
    	  m_List.SetItemText(0,1, str);
    	  m_List.SetItemText(0,2, str);
    	  m_List.SetItemText(0,3, str);
    

    bekomme ich die anderen Spalten gefüllt. Jetzt muss ich nur noch den String splitten. Da fällt mir spontan meine CString frage ein, wöfür ich folgenden Code von euch bekommen habe

    CString strfR = strCurrentFontcolor.Left(f = strCurrentFontcolor.Find(',')); 
    	CString strfG = strCurrentFontcolor.Mid(f+1,strCurrentFontcolor.Find(',',f+1)-(f+1));
    	CString strfB = strCurrentFontcolor.Right(strCurrentFontcolor.GetLength()-strCurrentFontcolor.ReverseFind(',')-1);
    

    Aber hier habe ich ja nur 3 Möglichkeiten Left , Mid und Right.

    Ich brauche aber 4, da ich 4 Spalten habe.

    Hat jemand dafür eine Idee?

    asmodia



  • Schau doch mal bitte in die MFC FAQ.
    evtl. auch in die C++ FAQ.

    Devil



  • Danke. Das Problem habe ich schon selbst gelöst.

    Hier der Code falls es jemanden interessiert, oder jetzt schreit "ooooh ha"
    so sollte man es nicht machen 😃

    BOOL CMyDialog::OnInitDialogBar()
    {
        CMyDialog::OnInitDialogBar();
    
        m_List.InsertColumn ( 0, "Spalte1", LVCFMT_CENTER, 54 );
        m_List.InsertColumn ( 1, "Spalte2", LVCFMT_CENTER, 38 );
        m_List.InsertColumn ( 2, "Spalte3", LVCFMT_CENTER, 48 );
        m_List.InsertColumn ( 3, "Spalte4", LVCFMT_CENTER, 35 );
    
          CStdioFile myFile("c:\\daten.dat", CFile::modeReadWrite); 
     		int spalte; 
    
    		CString strSpalte0=strZeile.Left(spalte=strZeile.Find(",,")); 
    		UpdateData(FALSE); 
    		strZeile.Delete(0,spalte+1); 
    		//
    		CString strSpalte1=strZeile.Left(spalte=strZeile.Find(",,")); 
    		UpdateData(FALSE); 
    		strZeile.Delete(0,spalte+1); 
    		//
    		CString strSpalte2=strZeile.Left(spalte=strZeile.Find(",,")); 
    		UpdateData(FALSE); 
    		strZeile.Delete(0,spalte+1); 
    		//
    		CString strSpalte3=strZeile.Left(spalte=strZeile.Find(",,")); 
    		UpdateData(FALSE); 
    		strZeile.Delete(0,spalte+1); 
    		//
    
          m_List.InsertItem(0, strSpalte0);
    	  m_List.SetItemText(0,1, strSpalte1);
    	  m_List.SetItemText(0,2, strSpalte2);
    	  m_List.SetItemText(0,3, strSpalte3);
          } 
          myFile.Close();  
    
        return TRUE;
    }
    

    asmodia


Anmelden zum Antworten