Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 42
1

Conduit бинарный файл

10.06.2015, 06:17. Показов 1687. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, друзья. Нужна помощь в решении некого вопроса. В ходе реализации некого приложения на Haskell столкнулся с трудностью.
Есть бинарный файл такой структуры
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** ****
Каждые 4 звездочки - 2 байта.
Так вот, нужно выделить из этого файла первую 2-байт группу и записать в другой файл. Реализация через кондуиты, байтстринги.
Подскажите =)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2015, 06:17
Ответы с готовыми решениями:

Conduit Haskell
В общем занимаюсь реализацией AES. Написал код для 128-битного шифра. Пришла идея реализовать...

Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл
Бинарные файлы!! Помогите пожалуйста. Дано бинарный файл ( данные сначала в текстовом, конвертирую...

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student {...

Dictionary serialization: нужно провести сереализацию в бинарный файл и xml файл
Помогите сереализоровать словарь вида: public class BankManager : Dictionary<String, Bank> {}...

4
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
10.06.2015, 08:44 2
readFile. Возьмите от этой строки нужные байты и запишите через writeFile по выбору. Запись надо сделать строгой, иначе программа будет висеть и ничего не делать.
0
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 42
10.06.2015, 08:49  [ТС] 3
Ну,допустим, я ей укажу, что первые два байта, но как она на следующую строку пойдет считывать их так же?
Фактически, получается, что я первый столбик файла забираю

Добавлено через 1 минуту
На fpcomplete чтение определенными сегментами советуют делать так
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
import Control.Monad (unless)
import qualified Data.ByteString as S
import System.IO (withBinaryFile, IOMode (ReadMode, WriteMode))
 
main =
    withBinaryFile "file.txt" ReadMode $ \inH ->
    withBinaryFile "output.txt" WriteMode $ \outH ->
        let loop = do
                bs <- S.hGetSome inH 4096
                unless (S.null bs) $ do
                    S.hPut outH bs
                    loop
         in loop
Как подобное мне реализовать, только своими условиями и с кондуитом
0
Модератор
5047 / 3276 / 526
Регистрация: 01.06.2013
Сообщений: 6,806
Записей в блоге: 9
10.06.2015, 11:04 4
Лучший ответ Сообщение было отмечено Lostmyplace как решение

Решение

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module Main where 
 
import Control.Monad
import Control.Monad.Trans.Resource
import Data.Conduit
import qualified Data.Conduit.Binary as CB  -- cabal install conduit-extra
import qualified Data.ByteString.Lazy as L
 
main:: IO ()
main = runResourceT $ CB.sourceFile "input.bin" $= conduit $$ CB.sinkFile "output.bin"
    where 
          conduit = do
            w <- CB.take 2
            unless (L.null w) $ CB.drop 6 >> yield (L.toStrict w) >> conduit
Добавлено через 6 минут
Я понял что нужно 2 байта переносить в другой файл, 6 пропускать и так, пока файл не закончится.

Добавлено через 4 минуты
А если просто первые 2 байта скопировать
Haskell
1
main = runResourceT $ CB.sourceFileRange "input.bin" Nothing (Just 2) $$ CB.sinkFile "output.bin"
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,643
Записей в блоге: 13
10.06.2015, 12:07 5
Хорошая статья о кондуитах
0
10.06.2015, 12:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2015, 12:07
Помогаю со студенческими работами здесь

Повреждается бинарный файл при попытке его записи в другой файл
Делаю автоматизированную сборку. Для этого нужно соединить три файла в один новый. Но почему-то...

Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл
Нужно просто прочесть файл в структуру данных а потом оттуда записать в бинарный файл Вот как...

Записать в бинарный файл произвольные натуральные числа. Переписать в другой файл те элементы, которые кратны К
Помогите, пожалуйста! есть задание: Записать в файл N произвольных натуральных чисел. Переписать...

Дан символьный файл f. Получить копию файла f в файле q. Это должен быть бинарный файл
Дан символьный файл f. Получить копию файла f в файле q. Это должен быть бинарный файл. ПОмогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru