【发布时间】:2012-04-16 21:59:16
【问题描述】:
我需要编写一个从命令行参数检索文件并逐行读取该文件的 haskell 程序。我想知道如何解决这个问题,我是否必须将命令行参数作为字符串并将其解析为 openFile 或其他内容?我对 haskell 很陌生,所以我很迷茫,任何帮助将不胜感激!
【问题讨论】:
我需要编写一个从命令行参数检索文件并逐行读取该文件的 haskell 程序。我想知道如何解决这个问题,我是否必须将命令行参数作为字符串并将其解析为 openFile 或其他内容?我对 haskell 很陌生,所以我很迷茫,任何帮助将不胜感激!
【问题讨论】:
是的,如果想要指定一个文件作为参数,那么必须获取参数并将其发送到 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 将失败)怎么办?如果文件不存在/不可读怎么办?)
【讨论】: