3
我正在嘗試從SML中的文件中讀取文本,但我無法使其正常工作。這裏就是我試圖如何從SML中的文件讀取?
fun read file =
let val inStream = TextIO.openIn file
in
TextIO.StreamIO.input1 inStream
end
實際的函數調用input1
並不重要,我要的是能夠從文件中讀取。
我正在嘗試從SML中的文件中讀取文本,但我無法使其正常工作。這裏就是我試圖如何從SML中的文件讀取?
fun read file =
let val inStream = TextIO.openIn file
in
TextIO.StreamIO.input1 inStream
end
實際的函數調用input1
並不重要,我要的是能夠從文件中讀取。
你的錯誤是在TextIO.StreamIO.input1
,你很可能意味着TextIO.input1
。
如果你真的需要/ wan't使用StreamIO與文件工作,你必須轉換由openIN
返回instream
類型,一個StreamIO.instream
與TextIO.getInstream
功能。
您可以在SML Basis庫TEXT_IO signature中閱讀更多關於這些信息。
請記住,當您完成讀取文件時關閉文件是一種很好的做法。
更新
正如評論所說,你可以在整個文件中讀取(如果你知道它是小的),或者你可以通過逐行閱讀。
最簡單的事情是,如果你不想一個字地得到內容,就是用空白分割內容。這樣你最終將得到一個字符串列表,代表文件中的每個單詞「單詞」。
我不認爲'TextIO.input1'是正確的原因是它沒有在TEXT_IO簽名中列出。我想要的只是能夠逐字讀一個文本文件。 – Nosrettap
@Nosrettap:'input1'是'TEXT_IO'中包含的'IMPERATIVE_IO'簽名的一部分。但是,除非你的文件真的很大,否則我寧願使用'inputAll'並對你得到的字符串進行處理。 –
@Nosrettap,我不會責怪你對此感到困惑。基礎庫不容易破譯。只需注意一次「下面給出的TEXT_IO的簽名不是有效的SML [...]」。如果您查看[TextIO]上的MosML文檔(http://www.itu.dk/~sestoft/mosmllib/TextIO.html),您可能會得到更多的信息。但請注意,並非所有符合基本庫定義的MosML模塊(令人遺憾)。所以你不要將它作爲SML/NJ的主要參考。 –