Size: a a a

2019 November 13

I

Igor725 in pro.lua
В Lua нет никакой магии, если файл большой, то и потратить на него нужно будет мног окак процессорного времени так и ОЗУ. Ты можешь в принципе обрабатывать файл не целиком, это сократит объём используемой памяти, например, вгрузил файл и через handle:read("*l") читаешь из него строки и сразу же их пишешь в другой файл, после окончания первого файла закрываешь оба, удаляешь первый, а второму даёшь имя первого файла. Этот способ хорош, если файлы большие, потому что Lua не сильно то и дружит с ну очень длинными строками (речь идёт про гигабайты даты).
источник

AS

Anatoliy S in pro.lua
Igor725
В Lua нет никакой магии, если файл большой, то и потратить на него нужно будет мног окак процессорного времени так и ОЗУ. Ты можешь в принципе обрабатывать файл не целиком, это сократит объём используемой памяти, например, вгрузил файл и через handle:read("*l") читаешь из него строки и сразу же их пишешь в другой файл, после окончания первого файла закрываешь оба, удаляешь первый, а второму даёшь имя первого файла. Этот способ хорош, если файлы большие, потому что Lua не сильно то и дружит с ну очень длинными строками (речь идёт про гигабайты даты).
ну понятно
источник

I

Igor725 in pro.lua
Или же если файлы не такие уж и больше, пердположим, меньше 500 мегов, то можно сразу прочитать весь файл в переменную, с помощью функции gsub убрать ненужные строки, как уже выше Алекс сказал, открыть занвоо этот файл для чтения и записать в него дату новую
источник

I

Igor725 in pro.lua
но даже если файл мегов 400-500 это займёт немало времени
источник

I

Igor725 in pro.lua
всё в целом
источник

I

Igor725 in pro.lua
особенно обработка регулярок
источник

AN

Alex Novi in pro.lua
Правильно я понял что Анатолий ищет что то типо
file.open('some file name').deleteStroke(2).save().close()
источник

I

Igor725 in pro.lua
Эх, если бы это так работало
источник

AN

Alex Novi in pro.lua
100мб текстового файла - попахиваете самописной BD )))
источник

AN

Alex Novi in pro.lua
Igor725
Эх, если бы это так работало
типо не хватает либы для декларативного описания ))
источник

AS

Anatoliy S in pro.lua
Igor725
Эх, если бы это так работало
Можно конечно такую функцию написать на самом луа - при встрече некоей строки побайтово подтянуть на её место в файле все последующее содержимое файла, затерев её таким образом, или на Си - тогда быстрее будет, но это конечно изврат, проще действительно скопировать то что нужно в новый файл и всё
источник

I

Igor725 in pro.lua
Не всё так просто с смещением данных в файле
источник

I

Igor725 in pro.lua
Если нужно выкинуть какие-то несколько байт из файла, не важно какие, то в оперативной памяти у тебя по любому должен быть весь этот файл
источник

I

Igor725 in pro.lua
А вот со смещнием данных уже интереснее
источник

I

Igor725 in pro.lua
Вот ты например прочитал весь файл в ОЗУ и предположим, что он у тебя в char array
источник

I

Igor725 in pro.lua
Тогда тебе нужно найти начальную позицию данных, которые ты хочешь вырезать и конечную
источник

I

Igor725 in pro.lua
И прибавляя к начальной и конечной по единице просто переносить байты из конечной в начальную
источник

I

Igor725 in pro.lua
А потом уже этот массив записать обратно в файл, но с другим размером
источник

AS

Anatoliy S in pro.lua
Это все не проблема, просто же говорю что проще скопировать в другой файл
источник

I

Igor725 in pro.lua
Ну если для тебя присутствие промежуточного файла - не проблема, то можно и в новый файл записать модифицированную дату
источник