none
Datei zeilenweise in CString Array einlesen RRS feed

  • Frage

  • Wie kann ich jede der Zeilen in einer Datei einzeln in ein Array einlesen? Also die erste Zeile belegt das 0. Element des Arrays, die 2. Zeile das 1. Element des Arrays usw.
    Beim schreiben der Datei habe ich das so gemacht:
    CString str[16];
    ...
    CStdioFile output;
    file.Open(_T("settings.dat"),CFile::modeWrite | CFile::modeCreate,NULL);
    for(int i = 0; i <= 15; i++)
    {
       output.WriteString(str[i]);
    }
    output.Close();
    

    VisualCPlusPlus
    Mittwoch, 5. Oktober 2011 19:39

Antworten

  • Was ist daran so schwierig? Es würde mich wirklich interessieren wo Du hier ein Problem bei der Realisierung hattest?

    CStringArray arr;
    CStdioFile f(...);
    for(int i = 0; i <= 15; i++)
    {
            CString str;
            f.ReadString(str);
            arr.Add(str);
    }

    oder

    CStringArray arr;
    arr.SetSize(15);
    CStdioFile f(...);
    for(int i = 0; i <= 15; i++)
    {
            f.ReadString(arr[i]);
    }

    Achtung keine Fehlerprüfung, wenn Deine Datei mal keine 15 Zeilen hat...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 6. Oktober 2011 06:10
    Moderator

Alle Antworten

  • CStdioFile::ReadString verwenden und einfach mit CStringArray::Add an den Array anfügen.
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 5. Oktober 2011 19:48
    Moderator
  • das versteh ich nicht ganz wie ich das machen muss. Die Datei enthält 16 Zeilen. Ich habe ein Array mit 16 Elementen. Nun möchte ich die Zeilen in das Array übertragen.
    Könnte ich vielleicht nochmal ein Codebeispiel bekommen?
    for(int i = 0; i <= 15; i++)
    {
       //Auslesen!?
    }
    


    VisualCPlusPlus
    Mittwoch, 5. Oktober 2011 20:09
  • Was ist daran so schwierig? Es würde mich wirklich interessieren wo Du hier ein Problem bei der Realisierung hattest?

    CStringArray arr;
    CStdioFile f(...);
    for(int i = 0; i <= 15; i++)
    {
            CString str;
            f.ReadString(str);
            arr.Add(str);
    }

    oder

    CStringArray arr;
    arr.SetSize(15);
    CStdioFile f(...);
    for(int i = 0; i <= 15; i++)
    {
            f.ReadString(arr[i]);
    }

    Achtung keine Fehlerprüfung, wenn Deine Datei mal keine 15 Zeilen hat...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 6. Oktober 2011 06:10
    Moderator
  • Ich habe es so gemacht wie in dem Beispiel. Aber bei der zeile
    f.ReadString(str);
    
    Kommt folgender Fehler während der Laufzeit:

    Wenn ich auf Wiederhohlen klicke, kommt das mein Programm einen Haltepunkt ausgelöst hat. Bei VS lande ich in der Datei fgets.c bei Zeile 57.
    VisualCPlusPlus
    Donnerstag, 6. Oktober 2011 19:23
  • Dann solltest Du auch die Datei öffnen aus der Du lesen möchtest ;)
    Schau Dir den fgets code an, es geht um str, das ist der Stream aus dem Du lesen willst und der ist NULL.
    Also hast Du CStdioFile nicht geöffnet...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 7. Oktober 2011 05:47
    Moderator