Обработка файлов -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 я должен обрабатывать текст из входного файла.

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 функционировать, если вам нужны более длинные разделители.


Это все инструменты, которые вам нужны для вашей программы, я думаю, что вы можете понять все остальное. Удачи!

Другие вопросы по тегам