OCAMLでのこれら3つのFSCANF呼び出しの違いは何ですか?
質問
私は単にスキップするために短いコードを書きました num_lines
入力ファイル内の行(デバッグ目的で行を印刷します。これは、私が試した2つのことが機能しなかったことを次に示します。
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のドキュメントを理解しようとしてきましたが、それは沈んでいないようです。誰かが私に最後のスニペットがうまくいった理由を正確に説明できますか?
解決
「%s」 - すべてを次のホワイトスペースに一致させます(ここでは " n")が、「 n」と一致することはありません
「%s n」 - ocaml文字列のように見えるものと「 n」と一致します
「%s n」 - すべてを次のホワイトスペース(「 n」はここ)に一致させます。これは、ファイルに後続の「 n」がない場合、または「 n」などの前にスペースがある場合には異なります。
「%S」 - ホワイトスペースまで何でも一致し、「 n」(またはおそらく白い空間もない)を含むすべての後続の白い空間を一致させます。これは、形式の文字列で「あらゆる空白、可能性のないもの」を意味するために機能します。
所属していません StackOverflow