Обработка файлов -Haskell
Как я могу реализовать в 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 я должен обрабатывать текст из входного файла.
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
функционировать, если вам нужны более длинные разделители.
Это все инструменты, которые вам нужны для вашей программы, я думаю, что вы можете понять все остальное. Удачи!