|
7 / 7 / 2
Регистрация: 01.03.2013
Сообщений: 142
|
||||||
Наиболее эффективное чтение текстового файла06.02.2015, 02:48. Показов 14445. Ответов 11
Метки нет (Все метки)
Здравствуйте. Как можно наиболее эффективно и быстро прочитать файл? Программа должна легко читать файл 5-10gb. В этом примере, я читаю файл и вывожу строку, которая содержит нужное слово:
1
|
||||||
| 06.02.2015, 02:48 | |
|
Ответы с готовыми решениями:
11
Как заменить чтение строки из консоли на чтение текстового файла? Чтение из текстового файла Чтение текстового файла |
|
Кандёхаем веселее!
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
|
|
| 06.02.2015, 16:45 | |
|
Была похожая тема недавно -> Запись и чтение большого файла или области на диске , посоветовали юзать БД.
Если в файле только одна строка, и разделить его (загружать по частям), будет риск разрезать искомое слово.
1
|
|
|
7 / 7 / 2
Регистрация: 01.03.2013
Сообщений: 142
|
|
| 06.02.2015, 17:56 [ТС] | |
|
MLPMan, спасибо за совет. Но мне не ясно, причем тут БД к чтению обычного текстового файла?
1
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 06.02.2015, 18:12 | |
|
А проблема то конкретно в чем? Не читайте всю строку целиком, а читайте кусками из файла.
1
|
|
|
7 / 7 / 2
Регистрация: 01.03.2013
Сообщений: 142
|
|
| 06.02.2015, 18:21 [ТС] | |
|
KuKu, проблема в том что при чтении файла большого размера в котором допустим одна только строка без пробелов приложение упадёт, так как файл читается построчно. А как читать кусками, к примеру читать только по 1000 символов? Объясните пожалуйста
0
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 06.02.2015, 18:31 | |
Сообщение было отмечено timedo1 как решение
Решение
1
|
|
|
7 / 7 / 2
Регистрация: 01.03.2013
Сообщений: 142
|
||||||
| 07.02.2015, 19:10 [ТС] | ||||||
|
KuKu, использую read(), но даже при чтении файла 500мб, очень медленно получается. Может я не правильно что то делаю?
0
|
||||||
|
7 / 7 / 2
Регистрация: 01.03.2013
Сообщений: 142
|
||||||
| 08.02.2015, 00:28 [ТС] | ||||||
|
KuKu, спасибо большое за советы. Мне как то трудно это дается, не как не пойму работу с памятью. Посмотрите пожалуйста код ниже, я хоть в правильном направлении? Подскажите пожалуйста что я не так делаю
0
|
||||||
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||
| 08.02.2015, 11:10 | ||
|
1
|
||
|
7 / 7 / 2
Регистрация: 01.03.2013
Сообщений: 142
|
|||||||||||||
| 08.02.2015, 20:22 [ТС] | |||||||||||||
|
KuKu, пробую использовать StringBuilder. Задача: Вывести строку в которой встречается вводимое слово. Вот как я это делаю: Сначала идет перебор по символам, каждый символ добавляется в stringB.append(barray[i]);, если мы встречаем перенос строки .equals("\n"), то очищаем StringBuilder вот так stringB.delete(0, stringB.length()); и ищем дальше, а если в этой строке совпадают символы с нужным словом, то выводим строку.
Проблемы: строка может быть очень длинная и StringBuilder в строке stringB.append(barray[i]); выбрасывает OutOfMemoryError. Нужно как то задать размер к примеру:
Ниже код:
UPD: не пойму еще одно. Почему если я хочу найти слово "самолёт" в файле:
0
|
|||||||||||||
|
17 / 17 / 7
Регистрация: 05.09.2012
Сообщений: 246
|
||||||
| 08.02.2015, 21:53 | ||||||
|
Вот альтернативный подход. Для вариантов, где огромные строки без разрывов. Считывает не всю строку, а поочерёдно по одному символу, добавляя их в стринг билдер. Билдер работае по принципу очереди - первый в - первый из. Длинна билдера равна искомому слову. После сравнения содержимого билдера с искомой строкой, из билдера удаляется первая буква, и добавляется в конец следующая из файла. Если совпадение найдено, то номер начальной буквы из строки, где найдено искомое слово, записывается в АррейЛист. Пробовал на файле размером в 100 мегабайт на не очень новом компе. В файле были случано сгенерированные буквы латинского алфавита, без пробелов и без переносов строки (ну то есть одна строка размером в 100 мегабайт). Заняло 16 мин, но думаю можна и побыстрее если б комп был новее.
1
|
||||||
| 08.02.2015, 21:53 | |
|
Помогаю со студенческими работами здесь
12
Чтение текстового файла Чтение из текстового файла Чтение из текстового файла Чтение из текстового файла
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|