Wie überspringe ich eine Zeile beim Scannen einer Textdatei?

Lesezeit: 2 Minuten

Benutzer-Avatar
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.

Benutzer-Avatar
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

Benutzer-Avatar
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.

Benutzer-Avatar
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 */

1146020cookie-checkWie überspringe ich eine Zeile beim Scannen einer Textdatei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy