1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
1 | |
Сравнение 2х текстовых файлов построчно каждый символ11.09.2015, 18:59. Показов 4678. Ответов 12
Метки нет (Все метки)
Всем привет. У меня вот такой вопрос, довольно сложный. Есть два текстовых файла. В них записан построчно набор символов одинаковой длины. Строки могут повторятся несколько раз. При сравнении 1-го файла со вторым все 5 позиций из 1го файла должны совпасть не более 1 раза (могут совсем не совпасть). Совпадение по 4 позициям должно быть в диапазоне от 2 до 5. 3 позиции имеют совпадение от 5 до 10. Все, что не входит в какой-либо диапазон - забывается. А все, что входит нужно записать в новый текстовый файл построчно.
В первом файле к примеру такой набор: Во втором такой: 12345 22000 12346 10348 12356 12323 10493 12112 10000 12345 ... ... и т.д. n-ое количество строк В первом файле в первой строке записано 12345. Мы сравниваем с каждой строкой из второго файла и ищем совпадения. С 1-ой строкой совпадает в 1 символ, мы ищем, где совпадает большее кол-во, далее идет вторая строка, с ней совпадение по 3 символам, про совпадение с 1ой строкой забыли. Далее 3-я строка совпадение также по трем символам уже имеем 2 раза. С 3 совпадениями запоминаем. 4-ая строка - совпадение по 2 символам, пропускаем. 5-ая строка - полностью совпадает по всем 5 позициям. Далее таким образом сравниваются все строки в файле, если удовлетворяет каждому диапазону, то записывается в новый. 12345
0
|
11.09.2015, 18:59 | |
Ответы с готовыми решениями:
12
Сравнение содержимого двух текстовых файлов построчно Сравнение содержимого двух текстовых файлов построчно Сравнение 2 текстовых файлов Сравнение текстовых файлов |
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
12.09.2015, 20:25 [ТС] | 2 |
Могу написать принцип, но с переводом в windows form нужна помощь. К определениям и синтаксису не придирайтесь, могу напутать.
Открывается 1 текстовый файл Открывается 2 текстовый файл С 1 файла считывается первая строка и сравнивается с каждой строкой второго файла (for 1 to n ), запускается счетчик совпадений. Если совпадений более 1, то переходим на вторую строку 1го файла и сравниваем ее с каждой строкой второго файла. Если совпадений 1 или нет вообще, то эта же строка 1 файла снова сравнивается с каждой строкой второго файла, но уже по маске, где сперва не учитывается 1ый символ и в первом файле и во втором. теперь это сравнивается с каждой строкой 2го файла, и при обнаружении совпадений запускается счетчик и считает кол-во совпадений, если нет, то минуя счетчик переходим делее, а далее не учитываем только 2-ой символ и также сравниваем с каждой строкой второго файла, при обнаружении совпадений плюсуем их кол-во к счетчику и так, пока не прогоним всю строку. Далее смотрим кол-во совпадений по 4 позициям, если их меньше 2х или больше 5, то переходит ко второй строке первого файла, иначе уже сравниваем по 3 позициям (##345, #2#45, #23#5, #234#, 1##45,... 123##) аналогично предыдущему запускается счетчик, при совпадениях от 5 до 10 строка записывается в новый текстовый документ, при совпадении менее или более указанного диапазона, минуя запись, переходим ко второй строке 1го файла и также сравниваем с каждой строкой второго файла. И так, пока на сравним все. Помогите реализовать
0
|
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
|
||||||||||||||||
12.09.2015, 21:21 | 3 | |||||||||||||||
Задача у Вас делится на две:
1. Прочитать из текстового файла в список строк. Здесь вот такой код.
1
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
||||||
22.09.2015, 22:18 [ТС] | 4 | |||||
Примерно так у меня получилось, но такое чувство, что программа зацикливается. Либо слишком долго обрабатывает данные (я не дождался конца)
Что я сделал не так?
0
|
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
|
|
22.09.2015, 22:22 | 5 |
Для каждой строки из файла C:\\Program\\variant.txt вы заново перечитываете файл C:\\Program\\cod2.txt. Вот он у Вас и тормозит.
Прочитайте два файла каждый в свой List<T>. И дальше работайте с этими списками.
1
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|||||||||||
23.09.2015, 19:18 [ТС] | 6 | ||||||||||
Вы имеете ввиду так?
Или так?
0
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
24.09.2015, 22:39 [ТС] | 7 |
Zhavoronkov5, Или что-то другое имеете ввиду?
При этих вариантах результат тот же
0
|
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
|
|||||||||||
25.09.2015, 00:42 | 8 | ||||||||||
Допустим, в каждом из Ваших файлов по 100 строк (небольшие совсем). Тогда вот этот цикл:
1
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
26.09.2015, 23:21 [ТС] | 9 |
Zhavoronkov5, Можете еще подсказать, как именно списки сравнить?
0
|
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
|
||||||
26.09.2015, 23:56 | 10 | |||||
1
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
27.09.2015, 13:24 [ТС] | 11 |
Zhavoronkov5, Я понимаю, что уже надоел, но у меня, возможно, последний вопрос. Можно ли как-то в списке объявить строку?
Я хочу сравнить каждую строку с каждой, и если они неравны, то сравнить уже каждый символ в этой строке и найти кол-во совпадающих Код
int counter = 0; for (int j = 0; j < variantlist.Count; j++) { for (int i = 0; i < PredPoslist.Count; i++) { if (list1[j] != list2[i]) { for (int k = 0; k < 15; k++) if (str1[k]==str2[k]) {counter++;} } } } Zhavoronkov5, Zhavoronkov5, Я понимаю, что уже надоел, но у меня, возможно, последний вопрос. Можно ли как-то в списке объявить строку? Я хочу сравнить каждую строку с каждой, и если они неравны, то сравнить уже каждый символ в этой строке и найти кол-во совпадающих Код
int counter = 0; for (int j = 0; j < list1.Count; j++) { for (int i = 0; i < list2.Count; i++) { if (list1[j] != list2[i]) { for (int k = 0; k < 15; k++) if (str1[k]==str2[k]) {counter++;} } } }
0
|
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
|
|
28.09.2015, 15:23 | 12 |
Что значит - объявить строку?
Чем не устраивает запись list1[i] - получаете полный доступ к элементу списка номер i. Каждую строку типа string можно представить в виде массива char. Соответственно, одиночный символ считываете также, через квадратные скобки.
1
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
28.09.2015, 21:43 [ТС] | 13 |
Zhavoronkov5,
Спасибо большое. Все реализовал, что хотел. При первом варианте (Когда для каждой строки первого файла перечитывал полностью второй файл) программа обрабатывала данные 15-20 минут. При втором варианте около 7 минут. Еще раз спасибо, только теперь за терпение)
0
|
28.09.2015, 21:43 | |
28.09.2015, 21:43 | |
Помогаю со студенческими работами здесь
13
Сравнение текстовых файлов Сравнение текстовых файлов. Сравнение файлов построчно из списка с удалением отсутствующих строк Сравнение двух текстовых файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |