ВиталийОдесса
8.09.2016 - 22:43
Здравствуйте. Есть текстовой файл 2гб, задача найти слово к примеру "тундра" - в этом файле слово встречается 357раз. Нужно для каждого слова найти байты с которых оно начинается! Результат должен быть примерно таким:
1 тундра 1144
2 тундра 44545
3 тундра 45666
4 тундра 741758
5 тундра 825527
6 тундра 5241757
....
357 тундра 19000000104
Пока есть вариант - побайтовый перебор всего файла, но для 2 гб это очень долго! Есть более оптимальные идеи?
Цитата (ВиталийОдесса @ 8.09.2016 - 21:43) |
Нужно для каждого слова найти байты с которых оно начинается! |
ВиталийОдесса
8.09.2016 - 23:09
для последующего быстрого доступа к ключу и соседнему тексту....
я бы загнал в базу данные по строчно. и количество байт в этой строке.
preg_match_all с параметром PREG_OFFSET_CAPTURE не прокатит?
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
ВиталийОдесса, текстовый файл прям совсем текстовый или там как раз есть что-то вроде ключ - значение?
Kusss правильно сказал, что нужно смотреть в сторону БД, но вот как загнать эту информацию туда это уже вопрос другой. Построчно - это слишком грубо.
_____________
Стимулятор ~yoomoney - 41001303250491
ВиталийОдесса
8.09.2016 - 23:59
на бд ресурсов нет! пробую с PREG_OFFSET_CAPTURE...
Цитата (ВиталийОдесса @ 8.09.2016 - 20:43) |
побайтовый перебор всего файла, но для 2 гб это очень долго! |
Не многим дольше, чем простой поиск вхождений. Только алгоритм правильный составить: не от первой буквы слова начинать проверку, а от последней.
_____________
Бесплатному сыру в дырки не заглядывают...
S.Chushkin
9.09.2016 - 00:38
Цитата (Valick @ 8.09.2016 - 23:40) |
Kusss правильно сказал, что нужно смотреть в сторону БД... |
Это шутка?
А то я не въехал в юмор...
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
ВиталийОдесса
9.09.2016 - 00:57
Цитата (Arh @ 8.09.2016 - 23:30) |
preg_match_all с параметром PREG_OFFSET_CAPTURE не прокатит? |
БОЛЬШОЕ СПАСИБО! это то что нужно!
sergeiss
9.09.2016 - 08:13
Цитата (S.Chushkin @ 9.09.2016 - 00:38) |
Это шутка? А то я не въехал в юмор... |
Почему же юмор? Валик правильно сказал. У ТС какая задача? Он сам говорит так:
Цитата (ВиталийОдесса @ 8.09.2016 - 23:09) |
для последующего быстрого доступа к ключу и соседнему тексту.... |
то есть, это как раз задача для БД. И чтобы не "изобретать велосипед", лучше один раз положить в БД и работать с ней.
Насчет "нет ресурсов для БД"... Для SQLite тоже нет ресурсов?????
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
S.Chushkin, у меня огромное подозрение, что ТС пытается организовать подобие базы данных (даже учитывая, что мой вопрос так и остался без ответа), поэтому нет, я не шучу.
А вот отсутствие ресурсов для БД, тут уж плакать или смеяться на выбор.
_____________
Стимулятор ~yoomoney - 41001303250491
ВиталийОдесса
9.09.2016 - 09:41
Цитата (Valick @ 9.09.2016 - 09:14) |
S.Chushkin, у меня огромное подозрение, что ТС пытается организовать подобие базы данных (даже учитывая, что мой вопрос так и остался без ответа), поэтому нет, я не шучу. А вот отсутствие ресурсов для БД, тут уж плакать или смеяться на выбор.
|
Просто задача неординарная, на машине крутится только php! preg_match_all с параметром PREG_OFFSET_CAPTURE справляется на ура (благо оперативки 32гб

)
Цитата (ВиталийОдесса @ 9.09.2016 - 08:41) |
Просто задача неординарная |
У меня на этот счёт иное мнение.
Вы слышали анекдот про неуловимого Джо?
Вот примерно то же самое, только вид с боку...
_____________
Стимулятор ~yoomoney - 41001303250491
ВиталийОдесса
9.09.2016 - 10:29
Цитата (Valick @ 9.09.2016 - 09:55) |
Цитата (ВиталийОдесса @ 9.09.2016 - 08:41) | Просто задача неординарная |
У меня на этот счёт иное мнение. Вы слышали анекдот про неуловимого Джо? Вот примерно то же самое, только вид с боку...
|
что быстрее?
1. Запрос к БД
2. Запрос к байту в файле
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.