nochmal: Messdaten aus txt files einlesen
-
ich merke gerade , dass ich mich etwas in den details verstricke und frage deshalb mal prinzipiell.
ich muss aus mehreren txt files messdaten auslesen.
die Daten der verschiedenen Messstationen liegen in mehrern .txt files pro tag.
die .txt files sehen so aus:
tag_uhrzeit_NamederMessation.txtNamederMessation ist A,B,C ...
die txt files sind intern so aufgebaut:
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.075also ein .txt file der Messstation A sieht so aus:
uhrzeit MWA1 MWA2 MWA3 MWA4
.
.
.mein plan ist folgender:
ich öffne nacheinander die files und schreibe den inhalt in ein feld. (die Uhrzeit wandele ich in eine fortlaufende zahl, so dass es egal ist, in welcher reihenfolge die files eingelesen werden)
danach sollten die Messwerte in folgender form vorliegen:
zähler MWA1[1] MWA2[1] MWA3[1] MWA4[1]
zähler MWA1[2] MWA2[2] MWA3[2] MWA4[2]
.
.
.umsetzen möchte ich das so:
einlesen eines textfiles -> überprüfen welche messstation -> auslesen und einsortieren /schreiben des fledes
einlesen des nächsten textfiles -> auslesen und einsortieren /schreiben des fledes
so lange bis der ordner leer ist.insbesondere wie ich nacheinander die unterschiedlichen .txt files auslese ist mir noch nicht ganz klar,,
Für alle Tipps bin ich dankbar!
danke schonmal
-
arz schrieb:
die txt files sind intern so aufgebaut:
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.075Kommen zu der einen Uhrzeit von einer Messtation 4 Werte?
Und das Ergebnis soll dann so aussehen?
# A B C D 0 0.454 MWB[1] MWC[1] MWD[1] 1 0.769 MWB[2] MWC[2] MWD[2] 2 0.594 ... 3 0.945 ... 4 0.454 5 0.769 6 0.535
(in Zeile 6 beginnt die 2. Zeile mit der Zeit 030233)
Willst du die Werte dann im Programm weiterverarbeiten oder nur sortiert in eine Datei schreiben?
-
Entschuldige, das war wirr formuliert,, ich habe das erste post gerade editiert.
ja, pro zeiteinheit kommen 4 werte von einer station.
das ergebnis soll prinzipiell gleich aufgebaut sein, nur zeitlich sortiert und die daten eines tages in einem file zusammengefasst.
danach wird dann das eine feld eines tages ausgewertet.
danke und gruß
-
Wenn die Daten sortiert in der Datei stehen, kannst du erstmal alle Dateien öffnen und dann aus jeder Datei Zeilenweise einlesen und (je nach Zählerstand) an deine neue Datei/Feld anhängen.
arz schrieb:
... insbesondere wie ich nacheinander die unterschiedlichen .txt files auslese ist mir noch nicht ganz klar,
Was ist denn unklar?
Wie du die Zeilen einliest und auswertest? Mit fgets und sscanf.
Wie du mehrere Dateien öffnest? Du kannst auch ein Array von FILE machen bzw. ein Array von Dateinamen. Darum kannst du eine Schleife bauen.Ich würde das aber erstmal mit Shellscripten (evtl mit gnutools) bzw Perl versuchen
-
... gerade stehe ich vor einem ziemlich trivialen Problem:
mit :
printf(" welcher tag?"); scanf("%s", &tag);
frage ich den Tag ab, der ausgewertet werden soll. zB 03
so:
fHandle=FindFirstFile("d:\\Eigene Dateien\\CTests\\"'tag'"\\*",&wfd);
möchte ich dann den entsprechenden Ordner ansprechen um die einzelnen txt files auszulesen.
so funktioniert das aber nicht. wie bettet man denn variablen in den Verzeichnisstring ein?
danke schonmal!
-
Wenn tag ein char* ist, brauchst du das & nicht.
Wenn tag ein int ist, ist das %s falsch.Und den Pfad musst du mit sprintf zusammenbasteln.
-
tag[] sieht so aus:
char tag [2] ;
DirkB schrieb:
Und den Pfad musst du mit sprintf zusammenbasteln.
hmm, wie sieht die zeile mit sprintf denn dann aus? hab gerade ein bisschen rumprobiert es aber nicht geschafft.
und wie ändert sich dann diese zeile:
fHandle=FindFirstFile("d:\\Eigene Dateien\\CTests\"'tag'"\*",&wfd);danke nochmal
-
arz schrieb:
tag[] sieht so aus:
char tag [2] ;
Kapitel Strings, Zeichenketten nochmal lesen.
char tag[3] ;// mindestens 3, Größer ist besser. scanf("%2s",tag);
Muss tag überhaupt ein String sein? Sonst:
int tag; scanf("%d",&tag);
arz schrieb:
hmm, wie sieht die zeile mit sprintf denn dann aus? hab gerade ein bisschen rumprobiert es aber nicht geschafft.
und wie ändert sich dann diese zeile:
fHandle=FindFirstFile("d:\\Eigene Dateien\\CTests\"'tag'"\*",&wfd);danke nochmal
Das s bei sprintf steht für string. sprintf druckt also in einen String
char pfad[256]; // irgendwo ist auch ein Makro für die maximale Pfadlänge sprintf(pfad,"d:\\Eigene Dateien\\CTests\\%s\\*",tag); // Wenn tag ein int ist, ersetze %s durch %02d fHandle=FindFirstFile(pfad,&wfd);
-
bzw noch einfacher:
wie kann ich mit zB:
char tag [2] ; printf(" welcher tag?"); scanf("%s", &tag)
;
einen tag, zB "03", abfragen und statt:
fHandle=FindFirstFile("03\\*",&wfd);
direkt im code anzugeben die variable in den "pfadstring" einbinden??
danke
-
Danke Dirk,
du hast mir sehr geholfen!