Messdaten aus txt Datei einlesen



  • Hallo,
    ich bin auf der Suche nach einer Möglichkeit Messdaten aus einer txt-Datei geschickt einzulesen.

    die Daten liegen in folgendem Format vor:

    030232 0.454 0.769 0.594 0.945
    030233 0.454 0.769 0.535 1.075
    030234 0.413 0.801 0.535 1.075
    030235 0.413 0.801 0.356 0.775
    030236 0.413 0.801 0.356 0.775
    .
    .
    .
    wie ich die Datei Zeichen für Zeichen auslese ist mir klar,, gibt es eine Möglichkeit die 5 Werte direkt zeilenweise in int bzw float Arrays oä zu schreiben.

    also sowas:
    Datum[1] MWA[1] MWB[1] MWC[1] MWD[1]
    Datum[2] MWA[2] MWB[2] MWC[2] MWD[2]
    Datum[3] MWA[3] MWB[3] MWC[3] MWD[3]
    .
    .
    .

    Bin für jede Hilfe dankbar und sorry für die Anfängerfrage,, hab lange nicht mehr programmiert.

    danke,
    arz

    EDIT:
    ich verwende Dev-C++ / WinXP



  • Du kannst die Zeile mit fgets() einlesen und dann mit sscanf() die Werte auslesen.



  • Besorge dir einen aktuellen C Compiler, Dev-C++ wird seit längerem nicht mehr gepflegt. (für Windows z.B. VC++ Express oder CodeBlocks/Mingw/gcc)
    Und dann eine Struktur für deinen Anwendungsfall deklarieren, ein Array daraus definieren und dann wie erwähnt mit fgets/sscanf.



  • danke schonmal,, das ist im Prinzip genau das was ich suche.

    ... hab gerade festgestellt, dass das Öffnen des txtFiles doch nicht so funktioniert wie gedacht,, wäre also für einen kleines code Bsp:

    txt öffnen

    txt zeilenweise in Datum[1] MWA[1] MWB[1] MWC[1] MWD[1] speichern

    sehr dankbar.

    grüße
    arz



  • Zeig mal deinen Code, dann können wir auch sagen was falsch ist.



  • hier:

    #include <iostream>                             
    #include <fstream>                              
    #include<conio.h>
    
    int main()
    {
    
     #define ZEILENLAENGE 20
     FILE *quelle;
     char puffer[20];  //mit kleineren puffergrößen gibt es schwierigkeiten
    
    int Datum[10], zaehl;
    float MWA[10];
    
    zaehl=0;
    
       if( (quelle=fopen("Testmess.txt","r")) == NULL) {
          fprintf(stderr, "Kann Datei nicht oeffnen\n");
          return EXIT_FAILURE;
       }
    
       while(fgets(puffer, ZEILENLAENGE, quelle))
       //  { fputs(puffer, stdout);}
    
          {
    
          sscanf(puffer, "%i%f", &Datum[zaehl], &MWA[zaehl]);
    
          //ab hier zum überprüfen ob alles richtig eingelesen wird ....
          //leider stimmt der eingelesene char string nicht mit dem überein, was 
          //in Datum[] abgelegt ist ...
    
          printf (puffer);
          printf("%i\n",Datum[zaehl]);
          printf("%i\n",zaehl);
          getch();
          zaehl++;
          }
    
       return 0;
    }
    

    das textfile sieht so aus:
    070010 1.002
    070011 1.002
    070012 1.002
    070013 1.002
    070014 1.002
    070015 1.002
    070016 1.002
    070017 1.002
    070018 1.002
    070019 1.002

    bin für alle Anregungen etc dankbar



  • Nimm bei sscanf mal %d statt %i
    %i gehört nicht zum Standard.
    Es kann sein, dass eine Integer eingelesen wird, so wie C es auch macht:
    Mit führender 0 ist es eine Oktalzahl.



  • Was isn mit fscanf? ^^



  • danke,, hab das Datum jetzt als string gespeichert,, geht auch ....

    noch eine Frage dazu :
    ich lege das datum in folgendem array ab.

    char Datum[10][7];
    

    sieht auch alles gut aus (beim Teat-auslesen)

    Das bedeutet ja, dass 10 Strings a 7 Zeichen geschrieben werden (?) allerdings scheint die Angabe von [7] keinen Einfluss zu haben ,, dh ich habe auch mit anderen Angaben getestet und das Ergebnis ist gleich ...

    Danke und Gruß



  • Weil C-Strings nullterminiert sind. Soll heißen:

    char string[] = "Hallo!";
    

    Inhalt von string: { 'H' 'a' 'l' 'l' 'o' '!' '\0' } <- Letztes Zeichen = 0;

    Was nach dieser 0 kommt ist printf egal, es gibt nur bis dahin aus. Wie sollte es auch anders sein, printf weiß ja nicht wie lang ein Array ist, es bekommt nur einen Pointer auf das erste Element übergeben.

    Edit:
    Beim Einlesen von Strings musst du zudem aufpassen, die Arraygrenzen nicht zu überschreiten! Also zB.

    char buffer[100] = {0};
    scanf("%99s", buffer);
    

Anmelden zum Antworten