Ich möchte eine Datei scannen und vor dem Lesen eine Textzeile überspringen. Ich habe es versucht:
fscanf(pointer,"\n",&(*struct).test[i][j]);
Aber diese Syntax beginnt einfach mit der ersten Zeile.
NLed
Ich möchte eine Datei scannen und vor dem Lesen eine Textzeile überspringen. Ich habe es versucht:
fscanf(pointer,"\n",&(*struct).test[i][j]);
Aber diese Syntax beginnt einfach mit der ersten Zeile.
Zac
Ich konnte Zeilen mit scanf mit der folgenden Anweisung überspringen:
fscanf(config_file, "%*[^\n]\n");
Die Formatzeichenfolge entspricht einer Zeile, die beliebige Zeichen einschließlich Leerzeichen enthält. Das *
im Formatstring bedeutet, dass wir nicht daran interessiert sind, die Zeile zu speichern, sondern nur die Dateiposition zu erhöhen.
Erläuterung des Formatstrings:
%
ist das Zeichen, mit dem jeder scanf-Formatstring beginnt;
*
gibt an, dass das gefundene Muster nirgendwo abgelegt werden soll (normalerweise speichern Sie das gefundene Muster in Parametern nach der Formatzeichenfolge, in diesem Fall ist der Parameter NULL);
[^\n]
bedeutet ein beliebiges Zeichen außer Newline;
\n
bedeutet Zeilenumbruch;
also die [^\n]\n
bedeutet eine vollständige Textzeile, die mit Zeilenumbruch endet.
Bezug hier.
'\n'
Whitespace ist, bedeutet dies, dass eine beliebige Menge an Whitespace verbraucht wird, nicht nur ein einzelner Zeilenumbruch.
– Hyde
28. Oktober 2019 um 11:50 Uhr
Es sollte auch erwähnt werden, dass fscanf so implementiert ist, dass es die gesamte Zeile in den Speicher liest und sie dann freigibt.
– Jakob Nowak
30. März 2021 um 14:46 Uhr
Wirbelwind
fgets erhält eine Zeile und setzt den Dateizeiger ab der nächsten Zeile. Dann können Sie nach dieser ersten Zeile mit dem Lesen beginnen, was Sie möchten.
char buffer[100];
fgets(buffer, 100, pointer);
Es funktioniert, solange Ihre erste Zeile weniger als 100 Zeichen lang ist. Andernfalls müssen Sie überprüfen und eine Schleife ausführen.
Jack
Es ist nicht klar, in was Sie Ihre Daten zu speichern versuchen, daher ist es nicht einfach, eine Antwort zu erraten, übrigens könnten Sie einfach Bytes überspringen, bis Sie über a gehen \n
:
FILE *in = fopen("file.txt", "r");
Dann können Sie entweder mit eine ganze Zeile überspringen fgets
aber es ist unsicher (weil Sie die Länge der Linie a priori schätzen müssen), andernfalls verwenden Sie fgetc
:
char c;
do {
c = fgetc(in);
} while (c != '\n');
Schließlich sollten Sie Formatbezeichner in Ihrem haben fscanf
um Daten tatsächlich zu analysieren, wie
fscanf(in, "%f", floatVariable);
Sie können sich darauf beziehen hier für Spezifizierer.
fgets würde hier arbeiten.
#define MAX_LINE_LENGTH 80
char buf[MAX_LINE_LENGTH];
/* skip the first line (pFile is the pointer to your file handle): */
fgets(buf, MAX_LINE_LENGTH, pFile);
/* now you can read the rest of your formatted lines */