将Haskell GHCi命令结果输出到txt文件
我是哈斯克尔的新手将Haskell GHCi命令结果输出到txt文件,haskell,Haskell,我是哈斯克尔的新手 我很难将命令结果从GHCi输出到文件。我想知道是否有人能给我一个简单的解释如何做到这一点?到目前为止,我在网上找到的例子似乎过于复杂 假设您有一个函数mungeData,您确实有 ghci> mungeData [1..5] [5,2,5,2,4,6,7,4,6,78,4,7,5,3,57,7,4,67,4,6,7,4,67,4] 写文件 您可以这样将其写入文件: ghci> writeFile "myoutput.txt" (show (mungeData
我很难将命令结果从GHCi输出到文件。我想知道是否有人能给我一个简单的解释如何做到这一点?到目前为止,我在网上找到的例子似乎过于复杂 假设您有一个函数
mungeData
,您确实有
ghci> mungeData [1..5]
[5,2,5,2,4,6,7,4,6,78,4,7,5,3,57,7,4,67,4,6,7,4,67,4]
写文件
您可以这样将其写入文件:
ghci> writeFile "myoutput.txt" (show (mungeData [1..5])
ghci> writeFile "myoutput'.txt" $ unlines.map show $ mungeData [1..5]
我倾向于写作
ghci> writeFile "myoutput.txt" $ show $ mungeData [1..5]
去掉几个括号
把它读回来
你可以用电脑把它拿回来
ghci> fmap (read::String -> [Int]) $ readFile "myoutput.txt"
每行一个号码
您可以按如下所示的数字将其输出一行:
ghci> writeFile "myoutput.txt" (show (mungeData [1..5])
ghci> writeFile "myoutput'.txt" $ unlines.map show $ mungeData [1..5]
上面写的是
ghci> fmap (map read.lines::String -> [Int]) $ readFile "myoutput'.txt"
描述如何为GHCi输出着色(GHC>=7.6)。您可以指定一个日志函数,而不是预打印程序。例如,将以下内容添加到.ghci.conf
:
:{
let logFile = "/home/david/.ghc/ghci.log"
maxLogLength = 1024 -- max length of a single write
logPrint x = appendFile logFile (take maxLogLength (show x) ++ "\n") >> print x
:}
:set -interactive-print=logPrint
这将把GHCi的输出记录到GHCi.log
- 日志文件必须已经存在,否则
将发出投诉。你必须手动创建它appendFile
- 它必须适合
语句,否则GHCi将拒绝它。使用let
在GHCi中添加多行支持:{:}
- 显然,使用
可以消除在:l
中进行的所有导入,因此只能使用Prelude函数。Reddit帖子提到你可以重新定义ghci.conf
,但我对此一无所知。(如果您知道如何执行此操作,当然可以在日志文件不存在时自动生成日志文件。):l
writeFile“myoutput.txt”(show(addOne(x)
,其中x是一个列表,如1:2:3:4:5:[]您不需要在x
周围加括号,并且您缺少了一个紧括号。使用:writeFile“myoutput.txt”(show(addOne x))
谢谢您的回复。@AndrewC,如果我正在运行测试,加载一个tests.hs文件,然后在提示符中键入main,然后按enter键执行100个测试用例,该怎么办?如果我想将其写入一个文件,怎么办?使用您的方法打印main对我不起作用。我感谢您对此提供的任何帮助;)您可以重写main
以写入文件而不是屏幕,或者如果这太复杂,您可以使用ghc Test.hs-O2-o Test.exe
(在linux/MacOS/unix等上仅Test
)编译它,然后重定向其输出:Test.exe>testoutput.txt
太好了!这是对功能的使用,这要感谢bravit(维塔利·布拉吉列夫斯基)。