2009-11-02 30 views
1

我寫了簡短的代碼位,以簡單地跳過num_lines線在輸入文件(打印線條勾勒出用於調試目的這裏有兩件事情我想,沒有工作。OCaml中這三個fscanf調用有什麼區別?

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的文件,但它似乎並沒有在被下沉可能有人向我解釋,究竟爲什麼最後片段工作,但前兩次都沒有。 ?

回答

3

「%s」 - 將所有內容匹配到下一個空格(此處爲「\ n」),但從不匹配「\ n」

「%S \ n」 - 匹配看起來像Ocaml字符串的東西,然後「\ n」

「%s \ n」 - 將所有內容匹配到下一個空格(此處爲「\ n」),然後爲「\ n」。如果文件中沒有尾隨「\ n」或者在「\ n」之前有空格,則這將起作用。

「%s」 - 匹配任何內容到空格,然後所有尾隨的白色空間包括「\ n」(或者甚至可能沒有空白)。這是可行的,因爲「」意味着格式字符串中的「任何空格,可能沒有空格」。