Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 03.06.2011
Сообщений: 33
1

Построчное сравнение двух текстовых файлов

10.05.2012, 16:12. Показов 8864. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеются 2 текстовых файла, необходимо выполнить их построчное сравнение с выводом (например в Listview) отличающихся строк и ИХ ИНДЕКСОВ (номеров строк) на экран. Неужели нет ничего быстрее, чем :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
List<string> Source = new List<string>();
List<string> Destination = new List<string>();
 
 
StreamReader str1 = new StreamReader(_Path_File1_1, Encoding.Default);
                            while (!str1.EndOfStream)
                            {
                                Source.Add(str1.ReadLine());
                            }
StreamReader str2 = new StreamReader(_Path_File1_2, Encoding.Default);
                            while (!str2.EndOfStream)
                            {
                                Destination.Add(str2.ReadLine());
                            }
с последующим построчным сравнением результатов:

C#
1
2
3
4
5
6
7
for (int i = 0; i < Source.Count; i++) //Пусть здесь файлы одинаковы по длине
                        {
                            if (Source[i] != Destination[i])
                            {
                                ListViewItem...
                            }
                        }
Нет ли какого-нибудь более быстрого пути?? Этот вариант кажется мне очень медленным, когда последовательно сравниваются все строки. Да и заполнение LIstView (3 столбца: Nr. строки + строка из текста 1 + строка из текста 2) - тоже медленное.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2012, 16:12
Ответы с готовыми решениями:

Сравнение двух текстовых файлов
Добрый вечер! Задачка такая стоит: Сравнить два текстовых файла. Определить одинаковые ли они? То...

Сравнение двух текстовых файлов
Помогите пожалуйста с прогой) В С# уровень Hello World =( В С# выполнить сравнение двух текстовых...

Построчное сравнение тестовых файлов и запись дубликатов в третий
Есть 2 .txt файла, нужно сравнить каждую строку и записать количество одинаковых строк в 3 файл....

Сравнение двух текстовых переменных и вывод их разницы в виде текста что отличается в двух массивах
Есть две текстовых переменных типа string. Необходимо вывести в третью переменную, разницу этих...

4
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
10.05.2012, 16:45 2
Если так критична скорость можешь запустить отдельный поток, примерно такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
TextReader stream1 = new StreamReader(Path_File1, Encoding.Default) as TextReader,
    stream2 = new StreamReader(Path_File2, Encoding.Default) as TextReader;
string line1, 
    line 2;
for (int i = 0; (null != line1 = stream1.ReadLine()) && (null != line2 = stream2.ReadLine()); ++i)
{
    if (!line1.Equals(line2))
    {
        // отправить евент о нахождении разных строк
    }
}
 
// ловим евент и заполняем лист, можно еще заполнять прогресс бар
вообще при оптимизации важна любая деталь, а ты довольно скуп.
1
1 / 1 / 0
Регистрация: 03.06.2011
Сообщений: 33
10.05.2012, 16:59  [ТС] 3
У меня в общем случае файлы отличаются по длине,
несовпадающие строки надо отлавливать и отображать в ListView. В идеале конечно было бы даже хорошо отображать полностью все строки с маркировкой отличающихся.
Нашел в сети отличный пример кода (проект) на c#, но из-за отсутствия знаний не смог его приспособить к своим нуждам.
Пример сравнивающего калькулятора прикрепляю - глядишь кому понадобиться. Но там часть программы вынесена в отдельную .dll, что у меня не катит.
Вложения
Тип файла: zip DiffEngine_demo.zip (13.5 Кб, 118 просмотров)
Тип файла: zip DiffEngine_src.zip (23.4 Кб, 141 просмотров)
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
10.05.2012, 17:07 4
papusik, и еще: реже за линию только O(1) это в случаи с формулой, прочитать файл реже чем за линию не выйдет никак, а вот по поводу строк - другое дело, т.к. первую строку можно сделать в определенном формате, что-бы можно было за O(1) узнавать количество строк в файле, находить точку с которой начинается итая строка и ее длину, и т.д.

Если быть кратким - тебе надо фс для своих файлов если хочешь что-то ускорить. И лучше не изобретать велосипед а тупо юзать известные субд. (какая понравиться)

http://www.araxis.com/merge/ вот пример того как писать полезное сравнение. Где достать их код не знаю, но программка довольно удобная, если захочешь сделать опенсорсный вариант - свисни.
1
1 / 1 / 0
Регистрация: 03.06.2011
Сообщений: 33
10.05.2012, 17:12  [ТС] 5
У них там серьезная прога. Мне же достаточно меньшей скорости и функционала, чем у этих ребят. Таких программ сравнения много, но большинство из них платные. Посмотри на файлы, которые я вложил выше. Этого функционала мне бы с головой хватило.
0
10.05.2012, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2012, 17:12
Помогаю со студенческими работами здесь

Сравнение 2 текстовых файлов на уникальность текста
Здравствуйте уважаемые программисты! Я хочу реализовать одну маленькую программку. Многие из вас...

Сравнение 2х текстовых файлов построчно каждый символ
Всем привет. У меня вот такой вопрос, довольно сложный. Есть два текстовых файла. В них записан...

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

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


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

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