ASCII bzw. Txt-Datei einlesen
-
Die Zeilen einer Textdatei sind mit dem '\n' Zeichen abgeschlossen, diese kannst du mit fgetc einlesen und dein Programm zählen lassen.
Bei n = 2 zählst du dann die Leerzeichen, wieder bei n = 2 steht dein Dateizeiger unmittelbar vor dem ersten Integer Wert, den du möchtest.
Dann schwupp scanf und beide Werte sind eingelesen.
-
entschuldige bitte, aber ich komme da gerade überhaupt nicht mit
Wie am Anfang erwähnt bin ich ein ziemlicher Leihe mit einem einer ziemlichen schlechten Hilfe auf Englisch in meinem Compiler. Ein kleiner Codeausschnitt wie man fgetc anwendet wäre sehr hilfreich.
DANKE!Gruß
Maddin
-
Guckst du:
#include <stdio.h> int main() { char* filename = "test.txt"; int c = 0, n = 0; FILE* fp = fopen ( filename, "r" ); if ( fp == NULL ) { printf ( "Die Datei %s konnte nicht geoffnet werden.\n", filename ); return 0; } while ( (c = fgetc ( fp )) != EOF ) { putchar(c); if ( c == '\n' ) { n++; printf ( "Die %d Zeile wurde eingelesen, zum Fortfahren " "bitte Enter druecken.", n ); getchar(); } } fclose (fp); return 0; }
-
Jo Danke!!! Leider kommt bei "if (c=='\n')" folgende Fehlermeldung
"operands of == have illegal types 'char' and 'pointer to char' "Gruß
Maddin
-
MS@GL schrieb:
Jo Danke!!! Leider kommt bei "if (c=='\n')" folgende Fehlermeldung
"operands of == have illegal types 'char' and 'pointer to char' "
Hast du das Programm von Hand abgetippt? Dein Fehler klingt danach, als hättest duc=="\n"
geschrieben, anstatt:
c=='\n'
In dem Code von Big Brother ist das aber richtig...
-
Hallo,
ich habe das natürlich kopiert. Ich kann mir das auch nicht erklären. Ich hatte schon beide Version ausprobier.
Woran kann es denn sonst noch liegen???
Bitte, ich brauch dringend hilfe!!!Danke aber trotzdem schonmal!
Gruß
Maddin
-
Hallo,
noch mal das ganze Programm zeigen, mit Fehlermeldung, in welcher Zeile usw...oder was sonst nicht geht, wenn kein Fehler...
MfG,
Probe-Nutzer
-
Hallo,
ich habe mittlerweile eine andere Lösung gefunden. Aber ein Problem gib es immer noch mit dem einlesen.
Ich lese die Datei jetzt Zeilen weise mit einer while-Schleife und fscanf ein.char datum[10], zeit[12]; float kraft, weg; FILE *fp; fp=fopen("Data1.txt","r"); while (fscanf(fp,"%s %s %f %f",datum, zeit, kraft, weg)!=EOF)
Dabei tauch jetzt folgendes Problem auf. Das Datum wird zusammen mit der Zeit eingelesen. "26.10.200914:56:44.312"
Die Zeit, die Kraft und der Weg jedoch einzeln so wie es sein soll.
In der Datei sind die Spalten alle durch Tabulator getrennt.
Ich kann mir das nich erklären.
Ich wäre auch zufrieden, wenn man die Zeit einfach abschneiden könnte und das dann nur das Datum in der Variablen übrig bleibt.
Vielleich habt ihr ja ne Idee?!Danke schonmal!!!
Gruß
Maddin
-
Bei dir fehlen die Adressoperatoren im scanf Aufruf.
Muss heißen: fscanf(fp,"%s %s %f %f",datum, zeit, **&**kraft, **&**wegDein Programm könnte tatsächlich so funktionieren, aber nur wenn die Anzahl der verworfenen Strings durch die Anzahl der %s im Formatstring Teilbar ist ( hier 2 ).
Ansonsten gibts Datensalat, z.B. wird dann ein Teil des Datums in der Kraft gespeichert usw! Deine char Puffer sind zu klein für Stringfunktionen!Wenn du jetzt doch konstante Arrays nimmst, mach es lieber ca. co:
char buf[1024] = {0}, datum[64] = {0}, zeit[64] = {0}; float kraft = 0.0, weg = 0.0; while ( fgets ( buf, sizeof(buf), fp )) // erste zeile überspringen { if ( NULL == ( fgets ( buf, sizeof(buf), fp )) // zweite zeile überspringen break; if ( 4 != fscanf ( fp, "%s %s %f %f", datum, zeit, &kraft, &weg )) { puts("lost!"); fcloseall(); exit(-134); } printf ("Kraft: %f Weg: %f\n", kraft, weg ); }
-
Hallo Big Brother,
hab vielen Dank für deine Hilfe. Leider habe ich ne ungerade Anzahl an Strings so dass es leider den von dir beschriebenen Datensalat gibt. Aber du hast mir trotzdem sehr geholfen. Der Tipp mit dem char-Puffer war genau richtig!!! Die Korrektur bei fscanf sowieso. Ich hab jetzt wahrscheinlich nicht die eleganteste Lösung, aber es klappt immerhin so wie wollte!!!
Also nochmal vielen Dank!!!Gruß
Maddin