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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка. ОС Windows инициировала точку останова в файле http://www.cyberforum.ru/cpp-beginners/thread1200600.html
Доброго всем времени суток. Есть задание : Найти самое большое слово в файле и подсчитать количество таких слов. Собственно написал программку и выдает ошибку , которая выше.Кто чем сможет помогите плиз, желательно с пояснением!Заранее спасибо. Вот сам код #include <iostream> #include <cstdio> #include <fstream> #include <iomanip> #include <limits>
C++ Вывести на экран количество гласных букв в строке Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текста http://www.cyberforum.ru/cpp-beginners/thread1200591.html
C++ Подсчет количества предложений и слов в предложении
Нужно написать программу, которая в текстовом файле считает количество предложений и для каждого выводит количество слов в нем. Как-то не очень получается. Подскажите хоть в каком направлении дальше идти. Подсчет не верный, вывод тоже корявый. В чем ошибка не пойму. #include <iostream.h> #include <conio.h> #include <fstream.h> void main() { FILE *aa, *bb; char c,g; int i,n,j; i=1;
C++ Какие функции команды fseek() ?
Какие функции команды fseek() ?
C++ Строки с++ http://www.cyberforum.ru/cpp-beginners/thread1200577.html
При прогоне игнорирует 16-ю строку Небольшая часть программы: char c = getchar(); int str = {0}; // Результирующая строка int k = 0;
C++ Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текст Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текста подробнее

Показать сообщение отдельно
Rized
 Аватар для Rized
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
05.06.2014, 22:59     Обработка повторений строк в текстовом файле
Добрый вечер! Нужно обработать большой текстовый файл (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'ы поставлены для отладки, их тоже можно (и нужно) снести.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru