来自stdin的Haskell读取文件

时间:2012-04-03 08:54:07

标签: haskell stdin readfile

我需要编写一个haskell程序,它从命令行参数中检索文件并逐行读取该文件。我想知道如何处理这个,我是否必须将命令行参数作为字符串并将其解析为openFile或其他什么?我对haskell很新,所以我很失落,任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分: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`

(注意代码没有错误恢复:如果没有参数怎么办,args为空(head将失败)?如果文件不存在怎么办?可读吗?)

答案 1 :(得分:3)

首先,使用getArgs获取命令行参数。我想第一个对你来说最有趣。然后,使用openFile函数打开文件。最后,使用hGetLine逐行读取打开的文件。