2012-06-09 3 views
1

Как я могу реализовать в Haskell следующее:обработка-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

см. Ниже код, который я сделал до сих пор. Я застрял. –

Смежные вопросы