2013-01-25 48 views
3

我正在嘗試從SML中的文件中讀取文本,但我無法使其正常工作。這裏就是我試圖如何從SML中的文件讀取?

fun read file = 
let val inStream = TextIO.openIn file 

in 
     TextIO.StreamIO.input1 inStream 
end 

實際的函數調用input1並不重要,我要的是能夠從文件中讀取。

回答

6

你的錯誤是在TextIO.StreamIO.input1,你很可能意味着TextIO.input1

如果你真的需要/ wan't使用StreamIO與文件工作,你必須轉換由openIN返回instream類型,一個StreamIO.instreamTextIO.getInstream功能。

您可以在SML Basis庫TEXT_IO signature中閱讀更多關於這些信息。

請記住,當您完成讀取文件時關閉文件是一種很好的做法。

更新

正如評論所說,你可以在整個文件中讀取(如果你知道它是小的),或者你可以通過逐行閱讀。
最簡單的事情是,如果你不想一個字地得到內容,就是用空白分割內容。這樣你最終將得到一個字符串列表,代表文件中的每個單詞「單詞」。

+0

我不認爲'TextIO.input1'是正確的原因是它沒有在TEXT_IO簽名中列出。我想要的只是能夠逐字讀一個文本文件。 – Nosrettap

+0

@Nosrettap:'input1'是'TEXT_IO'中包含的'IMPERATIVE_IO'簽名的一部分。但是,除非你的文件真的很大,否則我寧願使用'inputAll'並對你得到的字符串進行處理。 –

+0

@Nosrettap,我不會責怪你對此感到困惑。基礎庫不容易破譯。只需注意一次「下面給出的TEXT_IO的簽名不是有效的SML [...]」。如果您查看[TextIO]上的MosML文檔(http://www.itu.dk/~sestoft/mosmllib/TextIO.html),您可能會得到更多的信息。但請注意,並非所有符合基本庫定義的MosML模塊(令人遺憾)。所以你不要將它作爲SML/NJ的主要參考。 –