文件处理-Haskell

Posted

技术标签:

【中文标题】文件处理-Haskell【英文标题】:File processing-Haskell 【发布时间】:2012-06-09 14:57:55 【问题描述】:

如何在 haskell 中实现以下功能:

    我从命令行收到一个输入文件。此输入文件包含用制表符、换行符和空格分隔的单词。 我必须用逗号替换这些元素(制表符、换行符和空格)。 然后将结果写入一个名为output.txt的文件。

非常感谢任何帮助。我的 haskell 技能仍在发展中。


到目前为止,我已经得到了这个代码:

    processFile::String->String
    processFile [] =[]
    processFile input =input

    process :: String -> IO String
    process fileName = do
    text <- readFile fileName
    return (processFile text)

    main :: IO ()
    main = do
    n <- process "input.txt"
    print n

在 processFile 函数中,我应该处理输入文件中的文本。

【问题讨论】:

这是作业吗?你试过什么? 是的,这是家庭作业。我没有尝试太多,因为我在 Haskell 实施方面没有太多想法。 【参考方案1】:

您可以使用getArgs 函数在命令行上读取参数。例如:

import System.Environment (getArgs)

main = do
  args <- getArgs
  case args of
    [arg] -> putStrLn $ "You gave me one arg: " ++ arg
    _     -> putStrLn $ "You gave me " ++ show (length args) ++ " arguments."

您可以使用readFile 函数读取文件。

contents <- readFile "test.txt"
putStrLn contents -- Prints the contents of the file

你可以使用writeFile函数写一个文件:

writeFile "test2.txt" "Some file data\n" -- Writes the data to the file

制表符、换行符和空格可以称为空格或单词分隔符。 words 函数将字符串转换为单词列表。

print $ words "some text with\nmany words"
-- prints ["some", "text", "with", "many", "words"]

intersperse 函数在列表的每个元素之间插入一个分隔符:

import Data.List (intersperse)

main =
  print $ intersperse '.' ["some", "text", "with", "many", "words"]
  -- prints "some.text.with.many.words"

如果您需要更长的分隔符,也可以查看intercalate 函数。


这些是您的程序所需的所有工具,我认为您可以弄清楚其余的。祝你好运!

【讨论】:

以上是关于文件处理-Haskell的主要内容,如果未能解决你的问题,请参考以下文章

使用 Haskell 的 zip-conduit 从 zip 存档中的文件中读取行

Haskell 中的音频和信号处理

为啥这个 Haskell 代码可以成功地处理无限列表?

是否有使用严格评估的 Haskell 编译器或预处理器?

寻找可以处理 Haskell 的网络主机 [关闭]

Haskell Json数据处理