web-dev-qa-db-ja.com

テキストファイルをスキャンするときに行をスキップするにはどうすればよいですか?

ファイルをスキャンして、読む前にテキストの行をスキップしたい。私は試した:

fscanf(pointer,"\n",&(*struct).test[i][j]);

ただし、この構文は単に最初の行から始まります。

13
NLed

fgetsは1行を取得し、次の行からファイルポインタを設定します。次に、その最初の行の後で、必要なものを読み始めることができます。

char buffer[100];
fgets(buffer, 100, pointer);

最初の行の長さが100文字未満である限り機能します。それ以外の場合は、チェックしてループする必要があります。

14
WhirlWind

私は次の指示でscanfで行をスキップすることができました:

fscanf(config_file, "%*[^\n]\n");

書式文字列は、スペースを含む任意の文字を含む行と一致します。 *は、フォーマット文字列で、行を保存するのではなく、ファイルの位置をインクリメントするだけであることを意味します。

フォーマット文字列の説明:
%は、各scanf形式の文字列が始まる文字です。
*は、見つかったパターンをどこにも配置しないことを示します(通常、フォーマット文字列の後にパラメーターに見つかったパターンを保存します。この場合、パラメーターはNULLです)。
[^\n]は改行以外の文字を意味します。
\nは改行を意味します。

したがって、[^\n]\nは、改行で終わる全文行を意味します。

参照 ここ

39
Zac

データを何に保存しようとしているのかが明確でないため、答えを推測するのは簡単ではありません。\nを超えるまでバイトをスキップすることができます:

FILE *in = fopen("file.txt", "r");

次に、fgetsで行全体をスキップできますが、安全ではありません(行の長さを事前に見積もる必要があるため)。それ以外の場合は、fgetcを使用します。

char c;
do {
  c = fgetc(in);
} while (c != '\n');

最後に、実際にデータを解析するには、fscanf内にフォーマット指定子を含める必要があります。

fscanf(in, "%f", floatVariable);

指定子については here を参照できます。

13
Jack

fgets ここで機能します。

#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 */
3
Casey