|
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 8
|
||||||
Подсчет строк в гигантском текстовом файле > 4 Гб19.02.2013, 01:25. Показов 2073. Ответов 8
Метки нет (Все метки)
Всем привет, я новичок в С++, но очень стараюсь. Прочитал Дейтелов и теперь хочу сделать что-то практическое и полезное.
Сам занимаюсь этическим хакингом , есть небольшая практическая цель - написать прогу, которая бы обьединяла N текстовых файлов - словарей для брутфорса в один гигантский, при этом бы сортировала слова и удаляла повторяющиеся. И при этом бы не жрала память. Начало было положено с написания кода, который выполнял подсчет строк в файле с помощью std::getline(), но к сожалению гетлайн не подходит для работы с большими файлами, и считает долго. Гигантский файл в память не загрузишь. Второй итерацией был написан код, представленный чуть ниже, в нем использовал принцим File memory mapping. И чтение файла ведется порциями по 1 МБ. Написано в VS2012 С++. Все работает чудесно, но уперся в ограничение 32 битов unsigned long.... обрабатывает файлы до 4 гб. А у меня на винте лежит словарик в 24 Гб....хотелось бы его посчитать. Подскажите ответ на 2 вопроса: 1) можно ли побороть проблемму на 32 битной системе 2) куда копать чтобы реализовать на 64 битах? Реально первая прога, которую написал не по учебнику, был бы также рад услышать конструктивную критику если заметите признаки говнокода. Код:
0
|
||||||
| 19.02.2013, 01:25 | |
|
Ответы с готовыми решениями:
8
Подсчет количества строк в текстовом файле Подсчёт количества строк в текстовом файле Подсчет количества строк в текстовом файле, имя которого задано первым параметром КФ. Проверить наличие указа |
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 19.02.2013, 04:33 | |
|
Есть ведь 64 битный тип long long int в новом стандарте. Так же есть тип std::size_t, который в 64 битной программе так же 64 битный.
0
|
|
|
840 / 347 / 67
Регистрация: 20.11.2012
Сообщений: 809
|
|||
| 19.02.2013, 09:07 | |||
Нужно двигать отображение. Смапил кусок, обработал, анмап. Смапил следующий кусок, обработал, анмап. И не нужно закрывать хэндл FileMappingObject'a каждую итерацию и создавать снова для одного и того же файла.
1
|
|||
|
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 8
|
|||||||
| 19.02.2013, 14:10 [ТС] | |||||||
|
А вот с остальным как-то не очень.В мануалах и примерах не нашел пример использования... уж не забросайте помидорами. Я не совсем понимаю как игратся с єтими // size of mapping object, high // size of mapping object, low // high-order 32 bits of file offset // low-order 32 bits of file offset Какие мне DWORD значения в 32 битном приложении нужно подставить чтобы прочитать из файла размером > 40GB Скажем, начиная с офсета в 42 949 672 960 B байта (40Gb) до 42 950 721 536 байта (40Gb + 1 Mb).
0
|
|||||||
|
840 / 347 / 67
Регистрация: 20.11.2012
Сообщений: 809
|
|
| 19.02.2013, 14:53 | |
|
Ну вот. А вообще используй long long или int64
1
|
|
|
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 8
|
|
| 19.02.2013, 16:30 [ТС] | |
|
Ответ не до конца понятен.
CreateFileMapping и MapViewOfFile принимают значения DWORD. (typedef unsigded long DWORD)....32 бита на сколько я понимаю. Разве я могу скармливать им long long? Или мне нужно дополнительно какой-то функцией распарсить побитно long long на два DWORDа и скармливать отдельно старшую и младшую часть? Тоесть применимо к моему вопросу будет ли работатьзначения подставленные ниже? Есть ли вобще смысл заморачиватся и высчитывать CreateFileMapping размеры, я так понимаю можно подставить нули и смапится тогда весь файл. Ведь эта функция не жрет память? CreateFileMapping // 0 // size of mapping object, high 0 // size of mapping object, low MapViewOfFile 10 // high-order 32 bits of file offset 0000 0000 0000 0000 0000 0000 0000 1010 0 // low-order 32 bits of file offset 0000 0000 0000 0000 0000 0000 0000 0000 1048576// number of bytes to map (1 MB) Добавлено через 8 минут А как получить размер большого файла для 32 бит приложения, или мне неменуемо нужно переезджать на 64?
0
|
|
|
840 / 347 / 67
Регистрация: 20.11.2012
Сообщений: 809
|
||||||||
| 19.02.2013, 16:34 | ||||||||
http://msdn.microsoft.com/en-u... s.85).aspx
1
|
||||||||
|
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 8
|
||||||
| 20.02.2013, 13:09 [ТС] | ||||||
|
Переделал все с учетом работы с большими файлами, намучался с этими типами данных...но теперь как-то криво работать начало. Вроде считает строки, но для разных размеров буфера памяти выдает разные результаты.
Для примера скормил словарь обьемом в 835Мб своей проге и сторонней, выдаются разные варианты. Скорей всего логическая ошибка, помогите выявить. Сам код вот какой теперь:
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 8
|
|
| 20.02.2013, 14:45 [ТС] | |
|
Все, сам нашел, забыл вставить вычисление офсета для всех непоследних итерраций... строки считались постоянно для нулевого офсета
0
|
|
| 20.02.2013, 14:45 | |
|
Помогаю со студенческими работами здесь
9
Подсчет слов в текстовом файле
Подсчет символов в текстовом файле. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|