Daten aus Datei in Array schreiben



  • Hallo,

    ich versuche ein Programm zu schreiben, dass aus einer Datei jeweils zu einer Zeit Messwerte einliest und dann in ein zweidimensionales Array schreibt zur weiteren Bearbeitung.

    Die Datei ist in etwa so aufgebaut:

    Zeit1, Messwert1, Messwert2, ... , MesswertN; 
    Zeit2, Messwert1, Messwert2, ... , MesswertN; 
    Zeit3, Messwert1, Messwert2, ... , MesswertN;
    usw.
    

    Da ich anfangs nicht weiss, wie viele Zeilen die Datei enthalten wird bzw. wie viele Messwerte zu jeder Zeit existieren (zu jeder Zeit kommen aber auf jeden Fall immer die gleiche Anzahl an Messwerten vor), muss ich das Array ja dynamisch allokieren.
    Dazu muss ich erstmal wissen, wie viele Messreihen (bzw. Zeilen) existieren. Das würd ich so machen, dass ich die Anzahl an ";" zählen lasse.
    Dann lass ich die Anzahl der Messwerte zählen. Das würde ich so machen, dass ich die "," zählen lasse und dann durch die Anzahl Messreihen dividiere.

    Dann würde ich das Array entsprechend allokieren, z.B.

    double [Messreihen][Messwerte];
    

    Jetzt meine Frage:

    Wie kann ich irgendwelche Zeichen in einer Datei zählen lassen bzw. wie kann ich überhaupt auf eine Datei zugreifen?
    Ich habs hinbekommen ein "Öffnen"-Dialog zu bekommen, in dem die Datei ausgewählt werden kann. Das hab ich mit CFileDialog gemacht.
    Aber dadurch bekomm ich auch nur Pfadname, Dateiname, etc.

    Mit welcher Klasse bzw. welchen Klassen muss ich weiter vorgehen?

    Oder würdet ihr das gar ganz anders machen?

    MfG und Danke



  • Gruwe schrieb:

    Dann würde ich das Array entsprechend allokieren, z.B.

    double [Messreihen][Messwerte];
    

    Das wird so nicht funktionieren (du kriegst einen Compiler-Error), da müsstest du mit new/delete arbeiten (damit legt man ein dynamisches Array an). Aber mach das auch nicht, nimm lieber einen STL-Container wie beispielsweise std::vector. Hier kannst du per Methode push_back immer ein weiteres Element hinzufügen. Du hat also eine dynamische Liste, ohne dich selbst um den ganzen Speicherkram kümmern zu müssen und kannst dir das Zeilen-Zählen sparen. Du musst nicht mehr im Vorfeld wissen, wieviele Einträge in der Datei stehen.

    Zum Thema Datei lesen: Sieh dir mal std::fstream an. Alternativ gingen auch die C-File-Funktionen (fopen, fscanf...), wenn dir die besser gefallen.



  • Da wir hier ja eigentlich bei MFC sind, warum kommen dann nicht solche vorschläge wie die Klasse CFile bzw. CStdioFile::ReadString() was gleich zeilenweise lesen kann, und den Container kann man sich sehr leicht mit CArray bauen.

    Nur mal so als Anmerkung zwecks Benutzung von STL und C-Funktionen (fopen, fscanf)


Log in to reply