Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2016 02:18:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск в больших файлах на 32 системе

Iskatel
Вы же предлагаете пилить под каждый конкретный случай.
Не, блоки разделяются по той информации, которая берётся прямо из строки поиска. Если ты знаешь, что искомая строка не длиннее 300 байт, то ты читаешь, например, по 1024 байта из файла. Когда прочитал, ищешь в этих 1024 байтах эту строку. Либо ты её находишь, либо её там нет. Если её там нет, ты должен прочитать новые 1024 байта, добавить к ним слева 299 байт из конца предыдущего блока и в получившемся блоке искать строку опять. Вот оно так и выглядит, что из файла ты читаешь по 1024 байта, а ищешь ты совсем не в этом, а в том, что подготовил. То есть вот эта череда блоков по 1024 байта переводится в череду блоков (1024, 299 + 1024, 299 + 1024, …). То есть читаешь ты одно, а ищешь ты в другом.

Но ты же говоришь “я ищу по регулярке”. Если ты ищешь по регулярке, то вот эта длина 300 задаётся прямо в регулярке через фигурные скобки. И эта длина может быть задана любой, а может быть не задана вообще. Вот этих вещей ты не видишь. То есть ты не понимаешь, что регулярка не может быть ограничена. Регулярка - это регулярка, они точно определены. А вот это типа “да у меня будет ограниченная регулярка” - это такая туфта. Ты говоришь “а я сделаю 300”, но это у тебя от незнания, потому что сегодня ты ищёшь 300, а завтра тебе же надо будет искать 500 и ты что будешь делать? Правильно, ты будешь писать новую программу. А почему? А потому что вот эту программу ты хреново написал. Это ограничение в 300 байт нафиг не нужно изначально. Я тебе даже больше скажу, сегодня тебе надо 300, а завтра надо будет 100 - и ты вот эту программу, которая даже больше перерабатывать может, не сможешь применить под эти изменившиеся условия, потому что зашил туда эту специфичную длину 300.

И вот ты применишь регулярку “.*” и что она найдёт? строку в 300 байт? А если тебе 100 надо или 500? Вот твоя программа становится неприменима.



Отредактировано py.user.next (Дек. 20, 2016 02:28:02)

Офлайн

#2 Дек. 20, 2016 04:10:11

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Поиск в больших файлах на 32 системе

А если взять буфер размером в два размера искомого выражения и сдвигать наполовину, т.е. вторую половину буфера копируем в первую, и заполняем из файла?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Дек. 20, 2016 15:00:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск в больших файлах на 32 системе

PooH
А если взять буфер размером в два размера искомого выражения и сдвигать наполовину
Не, оно, во-первых, слишком маленькое для чтения, из файла нужно читать большими кусками, так как с диска читает системный вызов, а часто его вызывать нельзя. То есть даже если ищешь 100 байт, читать надо килобайты, чтобы это было быстро и оптимально по трате ресурсов системы. А во-вторых, эта идея с двойным буфером приведёт к повторному поиску в том, в чём уже был выполнен поиск.

Пример:
Если назвать прочитанные из файла куски a, b, c, d (пускай даже каждый по 300 байт, а не по килобайту или по несколько килобайт), то вот они как читаются:

300a + 300b
поиск
300b + 300c
поиск
300c + 300d
поиск

То есть в 300b ищется два раза строка и в 300c ищется два раза строка, а надо только один раз искать. Поэтому используется другой способ: мы читаем большой блок и ищем в нём, а потом с конца отрезаем 299 байт и приклеиваем их в начало следующего блока:

1024а
поиск
299a + 1024b = 1323b
поиск
299b + 1024c = 1323с
поиск
299c + 1024d = 1323d
поиск

Тогда ты лишнего не ищешь, но и то, что там может на границу попасть, тоже не пропустишь.



Отредактировано py.user.next (Дек. 20, 2016 15:02:18)

Офлайн

#4 Дек. 20, 2016 20:44:55

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск в больших файлах на 32 системе

py.user.next
И вот ты применишь регулярку “.*” и что она найдёт?

Я же не дибил, я применяю регулярку, которая ищет то, что мне нужно. А нужное не больше 300 байт.

py.user.next
А если тебе 100 надо или 500? Вот твоя программа становится неприменима.

Это еще почему? Переменную over в исходном коде подправить и норм.


py.user.next
Но ты же говоришь “я ищу по регулярке”. Если ты ищешь по регулярке, то вот эта длина 300 задаётся прямо в регулярке через фигурные скобки. И эта длина может быть задана любой, а может быть не задана вообще. Вот этих вещей ты не видишь. То есть ты не понимаешь, что регулярка не может быть ограничена. Регулярка - это регулярка, они точно определены. А вот это типа “да у меня будет ограниченная регулярка” - это такая туфта. Ты говоришь “а я сделаю 300”, но это у тебя от незнания, потому что сегодня ты ищёшь 300, а завтра тебе же надо будет искать 500 и ты что будешь делать? Правильно, ты будешь писать новую программу. А почему? А потому что вот эту программу ты хреново написал. Это ограничение в 300 байт нафиг не нужно изначально. Я тебе даже больше скажу, сегодня тебе надо 300, а завтра надо будет 100 - и ты вот эту программу, которая даже больше перерабатывать может, не сможешь применить под эти изменившиеся условия, потому что зашил туда эту специфичную длину 300.


Вам не кажется, что уже как второй раз ВЫ переходите на личности, и считаете меня дибилом?

Жена не дала?… Снова?

Не ожидал такого отношения на форуме, где люди обычно помогают друг другу, тем боле от человека, обвешенного фентифлюшками типа рейтинга и т.п.

ЗЫ. Одну хорошую идею вы мне всетаки подали… Но отношение Ваше свинское.

Отредактировано Iskatel (Дек. 20, 2016 20:45:42)

Офлайн

#5 Дек. 21, 2016 02:05:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск в больших файлах на 32 системе

Iskatel
Я же не дибил, я применяю регулярку, которая ищет то, что мне нужно. А нужное не больше 300 байт.
Не дебил, а просто не знаешь - это две большие разницы. Например, вот ты спрашиваешь про большие файлы в 32-битной системе. Тебе говорят “слушай, дружок, а какое отношение битность системы имеет к размеру файла?”, а ты просто катаешь вату и думаешь “а что же я спросил, действительно?”. Вот ты говоришь “я ищу по регулярке”, тебя спрашивают “а какое отношение количество байт имеет к регулярке? они же бесконечные” и тут ты опять вату катаешь, жуёшь что-то невнятное. То есть выходит, что ты не знаешь, что такое 32-битная система, но говоришь, что это имеет значение, ты не знаешь, что такое регулярное выражение и говоришь нам, что оно у тебя ограничено. То есть у тебя какой-то свой мирок сформировался и ты думаешь, что это реальная теория. Так вот, открой соотвествующие документы, принятые во всём мире, и прочитай их, чтобы не нести всякую херню, в которой ты ничего не смыслишь.

И вот если ты этого не сделаешь, тогда да, тогда ты дебил, а пока что ты просто не знаешь.

Iskatel
Это еще почему? Переменную over в исходном коде подправить и норм.
Очень сомнительно, что ты сможешь написать это всё с переменной, если даже без переменной не можешь написать, иначе о чём мы тут уже третью страницу разговариваем, если ты можешь взять и написать, что задумал? Наверное, мы тут и разговариваем, потому что ты нихрена написать не можешь.
И код не принято поправлять после написания. Написать надо так, чтобы само всё определялось.

Iskatel
Вам не кажется, что уже как второй раз ВЫ переходите на личности, и считаете меня дибилом?
Нет, дебилизм - это болезнь, дебил - не тот, кто не знает, а тот, кто не знает и узнать не может просто умственно.
wiki. дебилизм
Можешь ли ты узнать сам обо всём, о чём спрашиваешь, когда есть книги и материалы? Вот узнай, что такое 32-битная система, что такое регулярные выражения. Это же базовые понятия, тут даже питон не затрагивается. А форум именно по питону, а не по сопливым понятиям из мира компов.

Iskatel
Жена не дала?… Снова?
Твоя давала, да я не брал.

Iskatel
Не ожидал такого отношения на форуме, где люди обычно помогают друг другу, тем боле от человека, обвешенного фентифлюшками типа рейтинга и т.п.
Тебе говорят, что как программист ты - ноль. У тебя просто стандартное сисадминское когнитивное искажение “если я хороший сисадмин, то и программист я неплохой уж точно”. Это очень частое явление, когда сисадмин приходит и понты кидает, а написать ничего не может, потому что для этого надо знать в программировании. Программирование и сисадминство - это две большие области, которые никак не пересекаются. Я вот Cisco не знаю и знать не хочу, это не моя тема, а кто-то там получает сертификаты (платит за них), потом меряется ими и их на работу берут в крупные компании на тысячи и десятки тысяч компов. Но для нас они лохи, потому что их предел - программа на сто-тысячу строк, написанная через жопу.

Почему у тебя мало фентифлюшек - потому что ты не можешь решить ни одной задачи. А я тут решал, они для меня простые все, так я держу себя в форме (мозги), а потом, зарядившись, решаю уже свои задачи какие-то. Вот недавно задачи переводил в программе на систему с архивацией, задача не тривиальная - это нужно было придумать, как архивировать задачи с атачами, хранить их в архиве месяцами и восстанавливать их обратно, и чтобы при этом атачи были доступны и до архивации, и во время, и после восстановления. Довольно сложная хрень, но всё получилось, раньше задачи загружались и видно было, как Emacs их медленно читает, а теперь все выполненные задачи сбрасываются в архив и основной файл содержит только небольшое число задач.
Что для этого надо было? Для этого надо было лежать и думать несколько часов про каждый закуток, пока не будешь точно уверен, что всё будет работать. Иначе можно начать делать, а потом в итоге узнать, что где-то какая-то мелочь ломает всё и что все действия в репозитории с ветками и слияниями проделаны зря.

Вот ты спрашиваешь про эту программу, как её написать, а я с первого твоего вопроса уже увидел её в готовом виде, как она работает. Когда я её увидел, я могу написать её, распланировав проект и прочее, раскидав во времени. И я вижу, что вот эту программу, ты её не напишешь, потому что для этого надо знать первое, второе, пятое и десятое, а ты демонстрируешь только фуфлознания какие-то - якобы знания, но левые. Поэтому я тебе и говорю, что то, что ты хочешь написать, ты не напишешь - знаний нет.



Отредактировано py.user.next (Дек. 21, 2016 02:14:53)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version