Mit fscanf mehrere zeilen aus einer Datei auslesen.
-
Hallo Zusammen;
Ich würde gerne eine Datei, welche mehrere Hex-werte beinhaltet auslesen und in einen Speicherbereich bzw. Array kopieren. Die Datei hat hierbei einen nicht strukturierten Aufbau, was heißen soll, dass in Zeile 1 bsw. 3 Werte stehen und in Zeile 6, 9 Werte.
Wie lese ich die ganze Datei aus, ohne das mir das newline-Zeichen Probleme bereitet? Ich habe es bisher mit Hilfe einer Iteration und nach diesem Schema wie es hier: http://support.microsoft.com/kb/60336/en-us beschrieben ist versucht, was jedoch nicht funktioniert.
Ich hoffe ihr könnt mir helfen.
Danke im Voraus.
-
Ich verstehe dein Problem nicht. fscanf ignoriert doch sowieso standardmäßig Whitespace, wozu auch Newlines zählen. Was hast du genau probiert und inwiefern hat das nicht funktioniert?
-
Hi;
Die Datei enthält ja wie beschrieben Hex-Werte bsw: \x23 \x23 (...).
Nun möchte ich diese werte einlesen, was ja auch durch fscanf(fp,"\\x%x",&buffer[i]) dann soweit klappt, allerdings werden Werte in den darauffolgenden Zeilen ignoriert, nachdem die erste Zeile fehlerfrei eingelesen worden ist. Lässt sich der Filepointer irgendwie verschieben, sodass er das '\n' -Zeichen ignoriert, und das einlesen fortsetzt?
-
Ach das meinst du mit Hexwerten! Ich dachte da steht einfach nur so etwas wie 12 A1 B3 ...
Zum Problem: Mach mal noch ein Leerzeichen vor das \\ in deinem Formatstring. Das ignoriert explizit allen Whitespace bis das \x gefunden wird.
edit: Hier mal als Code:
#include<stdio.h> int main() { FILE *fp = fopen("test.dat", "r"); int i; while (fscanf(fp," \\x%x",&i) != EOF) printf("Gelesen: %#x (%d)\n", i, i); }
Liest problemlos auch so etwas:
test.dat\x23\x24 \x25 \x7 \x87 \x67\x12 \x3 \x5
-
SeppJ schrieb:
while (fscanf(fp," \\x%x",&i) != EOF) printf("Gelesen: %#x (%d)\n", i, i);
Klassischer Anfängerfehler. Sobald mal eine unerwartete Zeichenkette in der Datei vorkommt, gibts eine Endlosschleife.
-
Wutz schrieb:
Klassischer Anfängerfehler. Sobald mal eine unerwartete Zeichenkette in der Datei vorkommt, gibts eine Endlosschleife.
Das weiß ich auch. Und die Datei könnte nicht existieren und printf könnte fehlschlagen und und und. Verzeih mir, wenn ich meine dreizeiligen Codebeispiele nicht immer gegen alle Eventualitäten absichere.
Die Alternative wäre nämlich, gar keine Beispiele mehr zu bringen.
-
Die Alternative wäre auch, den dreizeiligen Endlosschleifencode durch einen dreizeiligen Nicht-Endlosschleifencode zu ersetzen
while (1==fscanf(fp," \\x%x",&i)) printf("Gelesen: %#x (%d)\n", i, i);
-
Abend
Jap, jetzt klappt es, danke an euch beide für die schnelle Hilfe und Erklärung.