Problem mit String-Zuweisungen



  • Hi,

    Ich programmiere mit Embedded Visual C++,das nur zur Info.Weiß nicht ob es relevant ist.
    Ich habe da nun ein Problem.
    Ich bekomme meine Strings nicht in die Listbox.

    Hier mal der Quellcode:

    void Bahnhofsauswahl::OnShow() 
    {
    	CString zeile[14];
    	CFile BH;
    	int i;
    
    	BH.Open(_T("bahnhöfe.txt"),CFile::modeCreate|CFile::modeRead);
    
        for ( i = 1 ; i < 13 ; i++ ) 
        { 
    
    		BH.Read(zeile,sizeof(zeile));
    
    		m_Listbox.AddString (zeile );
    
    	}
    
                m_Listbox.AddString(_T("kshasdhahjk"));
    
    	BH.Close();
    
    }
    

    Das letzte AddString funktioniert,aber das in der Schleife nicht.Was muß ich da machen.Der Compiler bringt da immer Fehler.

    Bitte helft mir.

    Danke.

    MfG
    Michael



  • Hast du denn auch gedebuggt und geschaut, ob da auch was drin steht?



  • was für ein compilerfehler wird gezeigt?



  • Es compiliert es mir garnicht durch.
    Folgender Fehler kommt:

    error C2664: 'AddString' : cannot convert parameter 1 from 'class CString [14]' to 'const unsigned short *'

    Kann damit garnichts anfangen.

    MfG
    Michael



  • BH.Open(_T("bahnhöfe.txt"),CFile::modeCreate|CFile::modeRead);

    Löscht das nicht deinen Dateiinhalt? Was willst du dann noch auslesen?

    MSDN schrieb:

    CFile::modeCreate Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length.



  • wie wäre es mit
    m_Listbox.AddString (zeile[i-1] );



  • Ja logo..

    du hast nen CString-Array.. entweder du nimmst nen normalen CString oder du sagst welches element des Arrays du in die ListBox schreiben willst (z.B.: zeile[2])

    edit: kannst du nicht einfach CStdioFile benutzen? Da gibt es eine Readline - Methode.. is omho noch nen bischen leichter..



  • Geht immernoch nicht.

    Hattet aber Recht,die Datei war leer.Hab den Fehler behoben.

    Folgendes muß in der Funktion passieren:

    Die Listbox muß gefüllt werden.
    In der Datei sind 12 Einträge,die ausgelesen werden müssen und hinzugefügt.
    Ganz einfache TXT Datei.zeile für Zeile auslesen.
    So schwer kanns doch nicht sein,aber ich bekomme es nicht hin.

    Vielleicht kann mir ja einer was schreiben,oder Tipp geben woran es liegt.

    So wie ich es jetzt habe liest er nichts aus der Datei,komischerweise.
    Er fügt nur leere Zeilen an die Box an,was ja auch schonmal was ist.

    Hier der aktuelle Code:

    void Bahnhofsauswahl::OnShow() 
    {
    
    CString zeile[14];
    CFile BH;
    int i;
    
      BH.Open(_T("bahnhöfe.txt"),CFile::modeRead);
      for ( i = 1 ; i < 13 ; i++ ) 
      { 
    
         BH.Read(zeile,sizeof(zeile[i-1])); 
         m_Listbox.AddString (zeile[i-1]); 
      }   
      BH.Close();	
    }
    

    Danke schonmal.

    MfG
    Michael

    Edit von estartu_de: Bitte verwende doch Code-Tags (sfds)



  • So muss aber die Datei exisieren. Du kannst auch noch

    CFile::modeCreate|CFile::modeNoTruncate
    

    oder so ähnlich benutzen.
    Damit wird sichergestellt, dass, falls eine Datei schon existiert, diese nicht gelöscht wird. Andernfalls wird sie erstellt. 😉



  • Musste vorhin gleich selber so ein Daten-aus-Datei-Ausleser programmieren.
    check this code out:

    CStdioFile file;
     CString sFilename = "dat.txt";
    
     if (!file.Open(sFilename, CFile::modeRead)){
      AfxMessageBox("could not open file");
      return;
     }
    
     int start = 0 ;
     int end   = file.SeekToEnd();
    
     file.SeekToBegin();
    
     CStringArray sa;
    
      while(true){
        if(file.GetPosition() >= end) break;
    
        CString sLine;
        file.ReadString(sLine);
    
        // add to array, add to listbox, add to ....
        sa.Add(sLine);
        m_List.AddString(sLine);
      }
    

Anmelden zum Antworten