2009-11-02 54 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”(或者甚至可能没有空白)。这是可行的,因为“”意味着格式字符串中的“任何空格,可能没有空格”。