Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rized
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
#1

Обработка повторений строк в текстовом файле - C++

05.06.2014, 22:59. Просмотров 193. Ответов 0
Метки нет (Все метки)

Добрый вечер! Нужно обработать большой текстовый файл (119Мб, ~6млн. строк), в котором заведомо есть повторения строк и переписать в другой файл, уже без дубликатов строк. Для тестирования создал временный файл с 5 строками и 1 повторением, но скрипт не работает должным образом. Года три уже не работал с С++, голова не варит после N часов мучений. Подсказывайте, братцы!
C++
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{   
    ifstream F, NF; ofstream NFW; char str1[255], str2[255];; bool ne;//ne(notequal) использую для определения повтора
    F.open("new1.txt"); NFW.open("new_nd.txt", ios::app); // new1.txt - исходный файл, new_nd.txt - файл для записи
    F >> str1; NFW << str1 << "\n"; NFW.close(); //Костыль, чтобы внутренний цикл хотя бы начал выполняться
    while(!F.eof()){
    ne = true; //Условно считаем, что повтора нет
    F >> str1;
    cout<<"F "<<str1<<endl;//Для отслеживания хода выполнения цикла
    NF.open("new_nd.txt"); //Открыл для чтения "файл для записи". 
    while(!NF.eof()){//Смотрю не повторяет ли текущая строка из F существующие записи в новом файле(NF)
    NF >> str2;
    cout<<"NF "<<str2 << endl; //Ещё одна темная махинация для анализа выполнения скрипта
    if(strcmp(str1, str2) ==0){//Вот этот блок ни разу не срабатывает, хотя аналогичный ниже - вполне
    ne = false; 
    cout << "Res is equal in logical block"<<endl; 
    }
    }
    if(ne){//Не повтор? Предыдущий блок не работает, это условие теряет смысл
    NFW.open("new_nd.txt", ios::app);
    NFW << str1 << "\n";
    NFW.close();
    }
    NF >> str2;
    NF.close();
    if(strcmp(str1, str2) == 0)
    {
           cout << "Result is equal"<<endl;//Для теста. Этот кусок срабатывает,когда в обходе встречается повтор. Проверено   
    }
    }
    F.close();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 12 минут
Пишу на этом: Dev-C++ 5.0 beta 9.2 (4.9.9.2) with Mingw/GCC 3.4.2

Добавлено через 8 минут
Пардон, ребят. Проблему решил быстрее, чем её заметили. Если кому нужно: соль была в открытии/закрытии файлов и 1 лишнем потоке считывания. С 21 по 24 строку включительно можно убрать, 26, 30 и 31 - тоже. 27-29 ставятся вместо 35й.

Добавлено через 1 минуту
Абсолютно все cout'ы поставлены для отладки, их тоже можно (и нужно) снести.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 22:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка повторений строк в текстовом файле (C++):

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

Программа для поиска соответствие строк, учитывая регистр, в текстовом файле с 10000+ строк - C++
Уважаемые форумчане, прошу у вас помощи я неделю в поисках. Мне нужна программа или код для поиска слов, очень похожую на расширение Pearls...

Обработка данных, хранящихся в текстовом файле - C++
Дан текстовый файл f. Записать в перевернутом виде строки файла f в файл g. Порядок строк в файле g должен совпадать с порядком исходных...

Центрирование строк в текстовом файле - C++
Длина строк текстового файла не может превышать 80 символов. Нужно разместить все эти строки по центру. Вроде как идея такая... Сначала...

Алгоритм поиска строк в текстовом файле - C++
Доброго времени суток! Есть текстовый файл размером ~65 Мб, ~605000 строк. Из этих строк необходимо выделить строки, котрые содержат...

Подсчитать количество строк в текстовом файле - C++
Нужно написать программу : Подсчитать количество строк в текстовом файле. Под строкой понимать совокупность символов, заканчивающихся...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 22:59
Привет! Вот еще темы с ответами:

Поиск определенных строк в текстовом файле - C++
Здравствуйте. Есть файл &quot;file.txt&quot; в котором есть строки: Bread: 3 Milk: 1 Chicken: 4 Juice: 3 Potatoes: 2 Tomatoes: 1 ...

Найти количество строк в текстовом файле - C++
я не можу написати програму для підрахування кількості стрічок в текстовому файлі. чомусь в результаті видає 3 помилки, я пишу на Turbo...

Подсчет строк в гигантском текстовом файле > 4 Гб - C++
Всем привет, я новичок в С++, но очень стараюсь. Прочитал Дейтелов и теперь хочу сделать что-то практическое и полезное. Сам занимаюсь...

Удалить в текстовом файле символ распределитель в конце строк - C++
Нужно создать програму, что будет удалять в текстовом файле символ распределитель(пробел, символ табуляции) в конце строк. Нужно...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru