2013-04-09 168 views
1

如何輸出文件中的字符到SML/NJ中的標準輸入?這是我迄今爲止,但我目前卡住,因爲我得到的錯誤從編譯器扔回給我。輸出文件到標準輸入

代碼:

fun outputFile infile = 
let 
    val ins = TextIO.openIn infile; 
    fun helper copt = 
    case copt of 
     NONE = TextIO.closeIn ins; 
     | SOME(c) = TextIO.output1(stdIn,c); 
     helper(TextIO.input1 ins)); 
in 
    helper ins 
end; 

任何想法,以我要去哪裏錯了嗎?

回答

2

那麼,這取決於你要用文件輸入做什麼。如果你只是想打印從您的文件中讀取字符,而無需將其輸出到另一個文件,那麼你可以只打印輸出:

fun outputFile infile = let 
    val ins = TextIO.openIn infile; 

    fun helper copt = (case copt of NONE => TextIO.closeIn ins 
        | SOME c => print (str c); helper (TextIO.input1 ins)); 
in 
    helper (TextIO.input1 ins) 
end; 


outputFile "outtest"; (*If the name of your file is "outtest" then call this way*) 

然而,上面的例子是不好的,因爲它會給你無限循環,因爲即使遇到NONE,也不知道如何終止和關閉文件。因此,這個版本是更清潔,更具可讀性,並終止:

fun outputFile infile = let 
    val ins = TextIO.openIn infile; 

    fun helper NONE = TextIO.closeIn ins 
    | helper (SOME c) = (print (str c); helper (TextIO.input1 ins)); 

in 
    helper (TextIO.input1 ins) 
end; 


outputFile "outtest"; 

如果你只是想輸出你infile的內容複製到另一個文件中,則是另一回事,你必須打開輸出文件句柄在這種情況下。

相關問題