2012-04-03 256 views
0

我需要編寫一個haskell程序,它從命令行參數中檢索一個文件並逐行讀取該文件。我想知道如何解決這個問題,我是否必須將命令行參數作爲字符串並將其解析爲openFile或其他內容?我對哈斯克爾很陌生,所以我很迷茫,任何幫助將不勝感激!Haskell從標準輸入讀取文件

回答

8

是的,如果想要將文件指定爲參數,那麼必須獲取參數並將其發送到openFile。

System.Environment.getArgs將參數作爲列表返回。因此,考慮test_getArgs.hs

import System.Environment (getArgs) 

main = do 
     args <- getArgs 
     print args 

然後,

$ ghc test_getArgs.hs -o test_getArgs 
$ ./test_getArgs 
[] 
$ ./test_getArgs arg1 arg2 "arg with space" 
["arg1","arg2","arg with space"] 

所以,如果你想讀一個單一的文件:

import System.Environment (getArgs) 
import System.IO (openFile, ReadMode, hGetContents) 

main = do 
     args <- getArgs 
     file <- openFile (head args) ReadMode 
     text <- hGetContents file 
     -- do stuff with `text` 

(NB該代碼有沒有錯誤恢復:該怎麼辦如果沒有參數,所以args爲空(head將會失敗)?如果文件不存在/不可讀?)

+1

什麼將總結IO串的數字的好方法? – SNpn 2012-04-03 09:31:42

+0

@SNpn,求和的數字? (你必須提供更多信息) – huon 2012-04-03 09:35:00

+0

對不起,文件包含一個整數列表(每行設置一個整數)我需要檢索文件並對整數進行求和,我試圖'打印'。 sum(text)' – SNpn 2012-04-03 09:43:41

3

首先,使用getArgs來獲取命令行參數。我想第一個對你來說最有意思。然後,使用openFile函數打開文件。最後,使用hGetLine從打開的文件逐行讀取。