2012-06-09 79 views
1

我怎么能在Haskell实现如下:文件处理,哈斯克尔

  1. 我收到的命令行输入文件。此输入文件包含用制表符,换行符和空格分隔的单词。
  2. 我必须用逗号替换这些元素(制表符,换行符和空格)。
  3. 然后将结果写入名为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功能我应该处理从输入文件中的文本。

+0

这功课吗?你有什么尝试? – dflemstr

+0

是的,它是家庭作业。我没有尝试太多,因为我没有很多想法在实施Haskell。 –

回答

8

您可以使用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功能,如果你需要更长的分隔符。


这些都是你的程序需要的所有工具,我想你可以找出其余的。祝你好运!

+0

请看下面的代码我到目前为止。我卡住了。 –