1

入力ファイルの行を単純にスキップするための短いコードを書きましたnum_lines(デバッグ目的で行を出力します)。

for i = 0 to num_lines do
  print_endline (fscanf infile "%s" (fun p -> p));
done;;

for i = 0 to num_lines do
  print_endline (fscanf infile "%S\n" (fun p -> p));
done;;

しかし、これはうまくいきました:

for i = 0 to num_lines do
  print_endline (fscanf infile "%s\n" (fun p -> p));
done;;

fscanf のドキュメントを理解しようとしてきましたが、理解できていないようです。最後のスニペットが機能したのに、最初の 2 つが機能しなかった理由を誰かが正確に説明してくれませんか?

4

1 に答える 1

3

"%s" -- すべてが次の空白 (ここでは "\n") に一致しますが、"\n" には一致しません

"%S\n" -- Ocaml 文字列のように見えるものに一致し、次に "\n"

"%s\n" -- すべてを次の空白 (ここでは "\n")、次に "\n" に一致させます。ファイルに末尾の「\n」がない場合、または「\n」の前にスペースがある場合など、これは異なる動作をします。

"%s " -- 空白までのすべてに一致し、次に "\n" を含むすべての末尾の空白に一致します (または、空白がない場合もあります)。これが機能するのは、" " がフォーマット文字列内の「任意の空白、可能な空白」を意味するためです。

于 2009-11-02T02:55:26.817 に答える