С Новым годом! Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182

Программа сравнения информации из двух файлов

08.12.2012, 15:03. Показов 1713. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть программа:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
block :: String -> [(String, String)]
block "" = []
block str = map (\w-> (let (x:y:_) = words w in (x,y)) ) (lines str)
 
mainloop :: String -> String -> [(String, String)]
mainloop instr mapstr = map(\x -> todesc x (block mapstr))
                    (takenize instr)
db (x:(y:ys)) = ()
 
todesc -> String -> [(String, String)] -> (String, String)
todesc key [] = (key, "")
todesc key ((k, v):xs) = if  key = k then (k, v) todesc key xs
 
fourSym :: String -> [String]
fourSym [] = []
fourSym a = (take 4 a) : (fourSym (drop 4 a))
 
 
main = do
    str <- readFile "in.txt"
    let strArray = lines str
    
    longStr <- readFile "long.txt"
    
    writeFile "out1.txt" (show strArray)
    writeFile "out2.txt" (show (fourSym longStr))
Данная программа должна брать инфу из одного файла разбивать ее по 4 значения и сравнивать с инфой из второго файла. При совпадении выводить в файл код и информацию из 2 файла.
Вот 1 файл:
111100110101
Вот 2 файл:
1101 read
1001 write
Выводит ошибку парсинга в 10:8. Помогите исправить!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2012, 15:03
Ответы с готовыми решениями:

Программа для сравнения двух файлов
Добрый день! Требуется помощь в доработке программы. Суть в том, что программа должна запрашивать путь к двум текстовым файлам, понять...

Программа для сравнения двух текстовых файлов
Составьте программу для сравнения двух текстовых файлов. Если файлы не совпадают, то на экран вывести первые неравные строки и номер...

BAT для сравнения двух файлов
Помогите с батником. Есть f1.txt с почтами вида: admin@mail.com user@mail.com и f2.txt со строками вида: ...

18
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
08.12.2012, 16:16
Ты неверно написал в 7-й строке слово tOkenize
1
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
08.12.2012, 18:00  [ТС]
Исправил. Ошибка не исчезла( Что еще может быть?
0
 Аватар для calabi-yau
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
08.12.2012, 18:46
Цитата Сообщение от Сеня 2007 Посмотреть сообщение
todesc key ((k, v):xs) = if key = k then (k, v) todesc key xs
Haskell
1
todesc key ((k, v):xs) = if  key == k then (k, v) else todesc key xs
0
7 / 7 / 0
Регистрация: 23.11.2012
Сообщений: 15
08.12.2012, 20:01
Слепцы!

Замени
Code
1
todesc -> String -> [(String, String)] -> (String, String)
На
Code
1
todesc :: String -> [(String, String)] -> (String, String)
Добавлено через 4 минуты
Вот максимально рабочая версия (но все-равно не компилируется, tokenize надо где-то раздобыть):
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
block :: String -> [(String, String)]
block "" = []
block str = map (\w-> (let (x:y:_) = words w in (x,y)) ) (lines str)
 
mainloop :: String -> String -> [(String, String)]
mainloop instr mapstr = map(\x -> todesc x (block mapstr))
                    (takenize instr)
db (x:(y:ys)) = ()
 
todesc :: String -> [(String, String)] -> (String, String)
todesc key [] = (key, "")
todesc key ((k, v):xs) = if key == k then (k, v) else todesc key xs
 
fourSym :: String -> [String]
fourSym [] = []
fourSym a = (take 4 a) : (fourSym (drop 4 a))
 
 
main = do
    str <- readFile "in.txt"
    let strArray = lines str
    
    longStr <- readFile "long.txt"
    
    writeFile "out1.txt" (show strArray)
    writeFile "out2.txt" (show (fourSym longStr))
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
08.12.2012, 20:03  [ТС]
Всем спасибо, все исправил теперь ошибка в 7:42 modules failed, none. Это он на tokenize ругается библиотеку какую то дополнительно нужно скачать?
0
7 / 7 / 0
Регистрация: 23.11.2012
Сообщений: 15
08.12.2012, 20:19
Цитата Сообщение от Сеня 2007 Посмотреть сообщение
Всем спасибо, все исправил теперь ошибка в 7:42 modules failed, none. Это он на tokenize ругается библиотеку какую то дополнительно нужно скачать?
Вообще tokenize в коде не используется, можете смело выкинуть несколько функций и проверить (правда код совершенно под ваше описание не подходит, и работать правильно скорее всего не будет):

Code
1
2
3
4
5
6
7
8
9
10
11
12
fourSym :: String -> [String]
fourSym [] = []
fourSym a = (take 4 a) : (fourSym (drop 4 a))
 
main = do
    str <- readFile "in.txt"
    let strArray = lines str
    
    longStr <- readFile "long.txt"
    
    writeFile "out1.txt" (show strArray)
    writeFile "out2.txt" (show (fourSym longStr))
0
 Аватар для calabi-yau
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
08.12.2012, 21:52
Цитата Сообщение от evilinfuture Посмотреть сообщение
Слепцы!
Слона-то мы и не приметили
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
08.12.2012, 23:27  [ТС]
Если все выкинуть то ничего делаться не будет. Как исправить ошибку с tokenize?
0
7 / 7 / 0
Регистрация: 23.11.2012
Сообщений: 15
09.12.2012, 04:52
Цитата Сообщение от Сеня 2007 Посмотреть сообщение
Если все выкинуть то ничего делаться не будет. Как исправить ошибку с tokenize?
То что я предложил выкинуть в остальном коде никак не используется. Хоть там написать 200 функций, каждая из которых будет всю вселенную по кусочкам собирать, работа программы не изменится.
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
09.12.2012, 16:43  [ТС]
Что тогда нужно дописать до нужного мне функционала?

Добавлено через 4 часа 8 минут
Выручайте пожалуйста!
0
7 / 7 / 0
Регистрация: 23.11.2012
Сообщений: 15
09.12.2012, 20:27
Еще раз объясните задачу, как можно проще и подробнее (лучше всего на примерах, и на ПОЛНЫХ примерах, а то входные файлы вы показали, а что на выходе должно получаться - нет).

Если все будет понятно описано реализую, если нет будем уточнять и разбираться пока не станет все понятно.
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
09.12.2012, 20:34  [ТС]
На вход подается 2 файла:
в первом комбинация нулей и едениц: 11001010
во втором:
1100 писать
1001 читать

Таким образом второй файл представляет расшифровку 4 битной системы.
Мне нужно чтобы программа разбивала первый файл по 4 бита и сравнивала со вторым файлом. На выходе должно быть что то вроде:
1100 писать
0
7 / 7 / 0
Регистрация: 23.11.2012
Сообщений: 15
09.12.2012, 21:15
Ладно, вот код. Кривой до ужаса, но работает:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
by :: Int -> [a] -> [[a]]
by _ [] = []
by n xs = take n xs: by n (drop n xs)
 
words2 :: String -> (String, String)
words2 str = conc $ words str where
    conc (x:xs) = (x, concat xs)
 
groupTemplates :: String -> [(String, String)]
groupTemplates xs = map (words2) (lines xs)
 
decodeOne :: String -> [(String, String)] -> String
decodeOne _ [] = ""
decodeOne str (x:xs) | str == fst x = fst x ++ " " ++ snd x ++ "\n"
decodeOne str (_:xs) = decodeOne str xs
 
decode :: [String] -> [(String, String)] -> String
decode bs ts = concat $ map (\b -> decodeOne b ts) bs
 
main = do
    bits      <- readFile "bits.txt"
    templates <- readFile "templates.txt"
 
    writeFile "out.txt" $ decode (by 4 bits) (groupTemplates templates)
Пример работы:
-- Файл bits.txt:
11001010
-- Файл templates.txt:
1100 писать
1001 читать
-- Файл out.txt:
1100 писать
1
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
10.12.2012, 01:07  [ТС]
В чем же проявляется его кривость если он работает?
0
7 / 7 / 0
Регистрация: 23.11.2012
Сообщений: 15
10.12.2012, 02:20
Цитата Сообщение от Сеня 2007 Посмотреть сообщение
В чем же проявляется его кривость если он работает?
Местами некрасивый код.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
11.12.2012, 03:33
Если я правильно понял задачу:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Data.Functor
import System.IO
 
groupBy :: Int -> [a] -> [[a]]
groupBy _ []    = []
groupBy n input = take n input : groupBy n (drop n input)
 
filterDict :: [String] -> [String] -> [String]
filterDict quartets = filter (flip elem quartets . take 4)
 
main :: IO ()
main = do
  quartets <- groupBy 4 <$> readFile "bits.txt"
  dict <- lines <$> readFile "dict.txt"
  withFile "out.txt" WriteMode $ \h -> do
    mapM_ (hPutStrLn h) (filterDict quartets dict)
Цитата Сообщение от evilinfuture Посмотреть сообщение
concat $ map
concatMap
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
20.12.2012, 21:35  [ТС]
Как сюда сделать сообщение об ошибке если у нас не найден код для сравнения?
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
by :: Int -> [a] -> [[a]]
by _ [] = []
by n xs = take n xs: by n (drop n xs)
 
words2 :: String -> (String, String)
words2 str = conc $ words str where
    conc (x:xs) = (x, concat xs)
 
groupTemplates :: String -> [(String, String)]
groupTemplates xs = map (words2) (lines xs)
 
decodeOne :: String -> [(String, String)] -> String
decodeOne _ [] = ""
decodeOne str (x:xs) | str == fst x = fst x ++ " " ++ snd x ++ "\n"
decodeOne str (_:xs) = decodeOne str xs
 
decode :: [String] -> [(String, String)] -> String
decode bs ts = concat $ map (\b -> decodeOne b ts) bs
 
main = do
    bits      <- readFile "bits.txt"
    templates <- readFile "templates.txt"
 
    writeFile "out.txt" $ decode (by 4 bits) (groupTemplates templates)
0
2 / 2 / 1
Регистрация: 03.10.2010
Сообщений: 182
23.12.2012, 14:05  [ТС]
Помогите пожалуйста!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2012, 14:05
Помогаю со студенческими работами здесь

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

Программа сравнения файлов
Скажите пожалуйста: почему, когда я нажимаю на кнопку Compare у меня возникает ошибка? IDE - Eclipse Файлы добавляю как обычно: ...

Программа сравнения звуковых файлов
Есть 2 звуковых файла с расширением pcm в формате моно 16 бит. Требуется сравнить эти два файла и разницу между ними записать в третий...

Программа сравнения двух строк
Написать программу сравнения двух строк на языке с++ помогите, пожалуйста

Разработать пакетный файл для сравнения двух файлов
Разработать пакетный файл для сравнения двух файлов и вывода информации сравнения. Имена файлов задаются в командной строке через параметр.


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru