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,
arzEDIT:
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.002bin 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);