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