在哈斯克尔空旷的空间

时间:2015-12-17 22:25:50

标签: file haskell io

我一直在用关于i / o和其他一些东西的haskell制作小宝贝程序,我发现了一些有趣的东西。我想知道在文件中,我们可以处理空行吗?例如,我们可以计算空行数或者我们可以在两个空行之间检索数据吗?如果是这样,我们如何实现这样的代码片段?我是haskell的新手,让我很难理解语言的语法,所以我真的需要一些帮助来学习它。我试过了;

readFile "/tmp/foo.txt" >>= print . length . filter (== '\n');

但这只是按预期计算每一行。我怎样才能消除非空行并按照我的意愿对其余部分进行处理?

1 个答案:

答案 0 :(得分:2)

如果您是Haskell的新手,没有充分的理由像代码片段那样编写紧凑的代码。我会这样说的

ex1 = do
  contents <- readFile "Test.hs"
  let noLines = length (filter (== '\n') contents)
  print noLines

这样可以更容易地看到发生了什么。

下一步是探索Prelude:有一个名为lines的函数会将一堆文本分成几行。所以让我们分成几行并删除空行:

ex2 = do
  contents <- readFile "Test.hs"
  let nonempty = filter (/= "") (lines contents)
  print (length nonempty)

此处nonempty是您可以进一步处理的行列表(:: [String])。