私はfscanf()
関数を使って複数行のファイルを読んでいます。改行文字は無視したいが、ファイル内にあるかもしれない他の空白文字は無視したい。どうすればこれを最もうまくできますか?fscanf()で改行文字を無視する
-3
A
答えて
0
私は、これはあなたが求めるものをしていることを考える:
char ch[2];
while (fscanf(fp, "%1[^\n]%*[\n]", ch) == 1)
putchar(ch[0]);
最初の書式指定子は、文字列ch
に改行して格納していない1文字まで読み込み、および第二指定子は改行が、抑止を読み込み割り当て。このループの結果、改行をスキップしてファイル内のすべての文字をEOF
まで出力します。
@AnTは、このメソッドは改行文字で始まるテキストファイルでは失敗するというコメントを指摘しており、修正を提案しています:割り当てを抑制しながら改行を読み取るループの前にfscanf()
を呼び出します。改善のコードは次のとおりです。
char ch[2];
fscanf(fp, "%*[\n]");
while (fscanf(fp, "%1[^\n]%*[\n]", ch) == 1)
putchar(ch[0]);
0
あなたは改行文字を無視にのみ関心がある場合は、getc()
を使用してfscanf()
を使用するより簡単でより効率的である:
void copy_ignoring_newline(FILE *fin, FILE *fout) {
int c;
while ((c = getc(fin)) != EOF) {
if (c != '\n')
putc(c, fout);
}
}
あなたが望む任意の処理のためにこれを適応させることができますファイルの内容を実行します。
fscanf()
がファイルを解析するための非常に不格好インタフェースであり、それは%c
と%[
変換指定子を除き、スペース、改行、その他の空白文字と同じ扱い。 getc()
,fgets()
、またはfread()
の代替アプローチが必要に応じて適しているようです。
関連する問題
- 1. fscanfと改行文字
- 2. fscanf改行文字を読む
- 3. Vaadin:私のラベルは改行文字を無視します
- 4. diffで改行を無視する
- 5. 改行を無視して余白を無視する
- 6. MS SQL Serverで全文検索を実行するときに改行文字を無視する
- 7. 文字を無視する
- 8. powershell get-content改行を無視
- 9. fscanfで文字列を読み取る
- 10. CFileで改行(改行文字)を確認する
- 11. fscanf()を使用してカンマとドットを無視する
- 12. gVimのvimdiffで大文字小文字を無視する
- 13. 正規表現で改行を無視する
- 14. ExtJS - ラベルのテキストを設定すると、改行文字がプログラムで無視されますか?
- 15. fscanfの引用符を無視するには
- 16. ジャスパー・レポートで改行文字をテキスト・フィールドで無視させる方法を教えてください。
- 17. Gsonを使用して改行を文字に変換することを無視する方法
- 18. csv.Error:改行文字
- 19. PostgreSQL改行文字
- 20. CSVPrinter改行文字
- 21. 改行/改行文字の検証XSD
- 22. Logstash CSVフィルタ - 二重引用符で囲まれた改行文字を無視する
- 23. 入力文字を無視する
- 24. hrefの%文字を無視する
- 25. Devise Controllerが '+'文字を無視する
- 26. Regex:続く文字を無視する
- 27. C++:改行と空白を無視してファイルのすべての文字を取得する
- 28. EF6改行文字で文字列を照会する
- 29. 改行文字列のみを改行する正規表現
- 30. powerbuilderで大文字小文字を無視しますか?
まず言語を選択する必要があります。 CまたはC++。彼らは異なる言語です。 –
構文解析しようとしている形式は何ですか? – chqrlie
@SamVarshavchik私はCを使用していますが、これもC++のレガシー関数ではありませんか? C++に精通している方はfscanf()に慣れているはずです – piper1935