Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с большими текстовыми файлами. от 1 гига и больше. 
:(
    Опции темы
Blaga
Дата 31.1.2009, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: 2
Всего: 4



Доброго времени суток.
Появился вопрос. 
Как лучше всего распарсить большой файл. Очень большой, от гига и больше вплоть до десяти наверное... Файл текстовый.
Значит его нужно прочитать и удалить все повторяющиеся строки. То есть все строки должны стать уникальными. Конечно можно сделать в как обычно, брать первое слово и прогонять по файлу удаляя его, потом второе и т.д. Но файл у меня уж очень большой. Может быть есть какие нибудь другие средства?
Интересует алгоритм и подсказки по функциям. 
Заранее большое спасибо.


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
ksnk
Дата 31.1.2009, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Может написать все это на С++? 10 гиг парсинга и на нем будет конкретно тормозить  smile 

Алгоритм, в общем-то обычный
-- читаем покусочно fopen,... fread(...,1024) ... в буферную строку. 
-- Из буферной строки выкусываем str_pos'ом положение символов конца строки, - получаем одну строку. 
-- для каждой строки запоминаем ее начало в файле, длину и crc32. crc сохраняем в индексном массиве.
-- Если такой crc уже есть -  перечитываем строчку и сравниваем побуквенно...

Размер массива СRC для 10 гиг и длине строки в 80 символов будет 125 т штук...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
skyboy
Дата 31.1.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



внешняя сортировка в ВИКИ
сортировка слиянием в ВИКИ
правда, как сравнимо будет скорость сортировки в сравнении со скоростью индексирования(как предложил 
ksnk), оценвить не берусь.
PM MAIL   Вверх
Blaga
Дата 31.1.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: 2
Всего: 4



ksnk, если то что останеться от crc32 записывать в массив, то куда девать длинну строки и номер строки?
и еще а комп не загнеться от такого массива? например с 512 оперативки?

skyboy, спасиб, почитал, подумаю над этим тоже.


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
ksnk
Дата 31.1.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Blaga, Нееее! когда я в уме пытаюсь скомбинировать php, текстовый парсинг и 10 гиговый файл с данными, у меня наступает мозговой клинч ...  smile 

Переписать на С все это добро, imho, значительно более жизнеспособная идея... Дергать её cgi или явным вызовом из скрипта...

Насчет индексного массива, я имел ввиду чего-то такое
Код

$index=array();

...
$crc = crc32($currentString);
if (isset($index[$crc])){ // по слухам, array_key_exists медленее...
  // побуквенно сравниваем
} else {
  $index[$crc]=array(count($currentString), /* начало строки в файле */ $bufStart);
}




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Blaga
Дата 31.1.2009, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: 2
Всего: 4



проблема в том что я очень плохо знаю C++
:( 
наверное придеться в спешном порядке это исправлять.


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
Blaga
Дата 31.1.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: 2
Всего: 4



skyboy, там сортировка, а она мне не нужна. я говорил про повторки.


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
ksnk
Дата 31.1.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Кстати, а откуда возникла такая задача? Просто текстовый файл в 10 гигов  не каждая ОС потянет... Может ли такие файлы читать php, я, впрочем, тоже сомневаюсь.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
skyboy
Дата 31.1.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Blaga @  31.1.2009,  10:52 Найти цитируемый пост)
я говорил про повторки. 

если тебе сортировка повредит(нужно сохранить порядок следования) - то да.
в противном случае, удаление дубликатов и сводится к сортировке входящих данных: в таком случае удаление дубликатов будет произведено за один проход. В случае сортировки слиянием из двух файлов даже дополнительного прохода не потребуется.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.