2012-04-03 186 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从打开的文件逐行读取。