Контакт с большими файлами в Haskell

У меня есть большой файл (4 + концерты), позволяет, просто говорят, 4-байтовые плавания. Я хотел бы рассматривать его как Список, в том смысле, что я хотел бы смочь использовать карту, фильтр, foldl, и т.д. Однако вместо того, чтобы произвести новый список с выводом, я хотел бы записать вывод обратно в файл и таким образом только, чтобы иметь для загрузки небольшой части файла в памяти. Вы могли сказать меня что тип под названием MutableFileList

Кто-либо имеет, столкнулся с этой ситуацией прежде? Вместо того, чтобы изобрести велосипед я задавался вопросом если там Hackish путь к контакту с этим?

9
задан Brian Tompsett - 汤莱恩 22 November 2015 в 15:09
поделиться

3 ответа

You should not treat it as a [Double] or [Float] in memory. What you could do is use one of the list-like packed array types, such as uvector/vector/... in company with mmapFile or readFile to pull chunks of the file in at a time, and process them. Or use a lazy packed array type, equivalent to lazy bytestrings.

12
ответ дан 4 December 2019 в 09:36
поделиться

This should be quite helpful to you. You can use readFile and writeFile for what you need to do, and everything is done lazily. It only keeps things in memory while they are still being used, so you can read, process, and write the file out without blowing up your computer.

9
ответ дан 4 December 2019 в 09:36
поделиться

Вы можете использовать mmap , чтобы сопоставить файл с памятью и затем обработать его. Имеется модуль mmap , который обещает читать и записывать файлы mmap и может даже работать с лениво сопоставленными фрагментами файлов, но я не пробовал.

Интерфейс для запись в сопоставленный файл кажется довольно низким уровнем, поэтому вам придется создавать свои собственные абстракции или работать с Foreign.Ptr и т.п.

1
ответ дан 4 December 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: