Iskatel
Файлы пишет не моя прога, разделение “в процессе” невозможно.
Твоя программа должна разделить на лету перед поиском. То есть программа начинает читать по блокам или по строкам и накапливает их до тех пор, пока в накопленном блоке на границе не будет двусмысленных данных. И этот накопленный блок находится в оперативной памяти (он небольшой). Потом он склеивается внутри в текст и в нём выполняется поиск. Потом он выкидывается из памяти и туда начинает накапливаться следующий блок точно таким же образом. Таким образом у тебя всё время занято немного памяти и поиск ведётся по всему файлу. Это типа смещающегося окна, про которое ты говорил, но в окне поиск выполняется и по тем данным, по которым ты уже искал, а в блоках поиск выполняется только по новым данным.
Вот смотри, ввёл ты строку поиска “.*” и что это значит? что оно должно совпасть со всеми гигабайтами файла? А как оно с ними совпадёт? Для этого она должна будет все гигабайты засунуть в оперативную память. А в оперативной памяти система сидит и никогда не известно, сколько памяти свободно (много её или мало). Вот из-за таких моментов ты это всё просто не напишешь - логически ты этого не видишь, а нюансов там таких дофига. Поэтому я тебе и говорю, сначала подучись программированию самому, чтобы хотя бы видеть алгоритм ещё до реализации. Проблема не в ограничениях системы, 32 бита в этой задаче вообще ни на что не влияют, проблема в логических подводных камнях алгоритма, которые ты не видишь, потому что программировать не умеешь (составлять алгоритмы). Что-то пытаешься написать, будто если ты начнёшь писать, то оно тогда сразу получится. Но оно не получается не из-за того, что ты не пишешь, а из-за того, что всё это неправильно придумано. Тут нельзя просто сказать “крэкс-фэкс-пэкс! программа напишись!”, тут тебе не новогодняя ёлка. Если ты не составил правильный алгоритм, то и программа не напишется.
Если grep брать (рассматривать устройство её алгоритма), там возможен поиск по регулярке, но поиск ведётся только по одной строке каждый раз, а строки не загружаются в память все сразу, а загружаются в память по одной штуке. Одна загрузилась, в ней по регулярке поискалось, потом она выкидывается и загружается следующая строка в ту же память. Таким образом память там всё время свободна, а поиск идёт.
Iskatel
Идея интересная, но: если уже есть файл, то границу там можно найти опять таки поиском… по большому файлу… в 32 системе…
Это больше похоже на то, что ты не знаешь, что такое битность системы. К размеру файлов она никак не относится.