Как записать список в файл? - PullRequest
4 голосов
/ 24 мая 2010

Я пытаюсь:

import System.IO
saveArr = do
    outh <- openFile "test.txt" WriteMode
    hPutStrLn outh [1,2,3]
    hClose outh

но это не работает ... вывод:

Нет экземпляра для (Num Char), возникающего из литерала `1 '

EDIT ОК hPrint работает с целыми числами, но как насчет числа с плавающей точкой в ​​массиве? [1.0, 2.0, 3.0]

Ответы [ 3 ]

8 голосов
/ 24 мая 2010

hPutStrLn может печатать только строки. Возможно, вы хотите hPrint?

hPrint outh [1,2,3]
2 голосов
/ 24 мая 2010

Массивы, списки и строки существуют только в воображении программиста и как термин в некоторых языках.

Файл - это последовательность байтов, поэтому, когда вы хотите что-то записать в него, вы должны кодировать эту воображаемую строку/ List / Массив в последовательность байтов (show или чем-то из Storable и т. Д.).
Также терминал - это последовательность байтов, которая представляет собой закодированное представление действий, необходимых для показа чего-либо пользователю.

У вас есть много способов кодирования.Вы можете сделать CSV представление массива с помощью foldr (\a b -> a (',' : b)) "\n" (map shows [1,2,3]) или вы можете распечатать его show [1,2,3]

1 голос
/ 24 мая 2010

выведите Binary для вашего типа, затем запишите данные в двоичной форме, используя 'encodeFile' из пакета Data.Binary. Это похоже на запись данных в виде строки байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...