Haskell Чтение Файла со стандартного ввода - PullRequest
0 голосов
/ 03 апреля 2012

Мне нужно написать программу на haskell, которая извлекает файл из аргумента командной строки и читает этот файл построчно. Мне было интересно, как подойти к этому, я должен получить аргумент командной строки в виде строки и проанализировать его в openFile или что-то? Я совершенно новичок в Haskell, поэтому я довольно растерян, любая помощь будет признательна!

Ответы [ 2 ]

8 голосов
/ 03 апреля 2012

Да, если кто-то хочет указать файл в качестве аргумента, он должен получить аргументы и отправить их в openFile.

System.Environment.getArgs возвращает аргументы в виде списка. Итак, учитывая test_getArgs.hs как

import System.Environment (getArgs)

main = do
        args <- getArgs
        print args

Тогда

$ ghc test_getArgs.hs -o test_getArgs
$ ./test_getArgs
[]
$ ./test_getArgs arg1 arg2 "arg with space"
["arg1","arg2","arg with space"]

Итак, если вы хотите прочитать один файл:

import System.Environment (getArgs)
import System.IO (openFile, ReadMode, hGetContents)

main = do
        args <- getArgs
        file <- openFile (head args) ReadMode
        text <- hGetContents file
        -- do stuff with `text`

(Обратите внимание, что в коде нет восстановления после ошибок: что делать, если не было аргументов, и поэтому args был пуст (head потерпит неудачу)? Что если файл не существует / не читается?)

3 голосов
/ 03 апреля 2012

Сначала используйте getArgs, чтобы получить аргументы командной строки.Я думаю, что первый наиболее интересен для вас.Затем используйте функцию openFile, чтобы открыть файл.Наконец, используйте hGetLine для построчного чтения из открытого файла.

...