2016-03-20 11 views
1

Как добавить текст в первую строку файла с помощью Lua?Добавить текст в первую строку файла с помощью Lua

out = io.open('file.txt}','a') 
out:write('Hello world. ') 
out:write('This is different') 
io.close(out) 

Я знаю, как добавить контент в файл, используя вышеуказанный код.

+0

1: Что такое «фюль»? 2: Вы не можете «добавить» что-то к * фронту * чего-то другого. По определению, «добавить» означает добавить к концу. –

+0

@ Никол Болас Я знаю, это способ сделать это? – Sergio

ответ

1

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

-- Open the file in r mode (don't modify file, just read) 
local out = io.open('file.txt', 'r') 

-- Fetch all lines and add them to a table 
local lines = {} 
for line in f:lines() do 
    table.insert(lines, line) 
end 

-- Close the file so that we can open it in a different mode 
out:close() 

-- Insert what we want to write to the first line into the table 
table.insert(lines, 1, "<what you want to write to the first line>\n") 

-- Open temporary file in w mode (write data) 
-- Iterate through the lines table and write each line to the file 
local out = io.open('file.tmp.txt', 'w') 
for _, line in ipairs(lines) do 
    out:write(line) 
end 
out:close() 

-- At this point, we should have successfully written the data to the temporary file 

-- Delete the old file 
os.remove('file.txt') 

-- Rename the new file 
os.rename('file.tmp.txt', 'file.txt') 

Надеюсь, это окажется полезным! Дайте мне знать, если он не работает так, как вы этого хотите.

Вот вам хорошая документация по библиотеке IO для дальнейшей справки. http://lua-users.org/wiki/IoLibraryTutorial

+0

Я бы не рекомендовал это. Если ваша программа выйдет из строя во время процесса записи, ваши данные повреждены! Никогда не перезаписывайте свой файл из энергозависимой памяти без резервного копирования! – Piglet

+0

@Piglet Я считаю, что я решил эту проблему с последними изменениями, которые я сделал. – Programmix

+1

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

2

Создайте новый файл, вставьте свой материал. Затем добавьте содержимое старого файла. Когда вы закончите, замените старый файл на новый файл.

Вы не добавляете (или не добавляете) файлы в общем. Это не имеет никакого смысла в рамках всей концепции. Вы сохраняете данные файла в кластеры. У них есть начало и заданный размер. Большинство языков программирования не предоставляют для этого никаких средств.

Представьте, что один файл сохраняется в кодах (кластерах). Вода представляет данные. Вы заполняете 1 ведро снизу вверх. Затем второй и т. Д. Когда вы добавляете что-то в свой файл, вы просто добавляете воду в свое последнее ведро. Если он заполнен, вы добавите еще один ковш и заполните его сверху вниз.

Теперь попробуйте добавить что-то в свой файл, наполовину ведро в размере. Ваше первое ведро заполнено, поэтому вы добавляете одно ведро в строку. Можете ли вы заполнить новое ведро сверху до середины? № Вы можете заполнить его снизу до середины. Но теперь у вас есть пробел в полвека в вашем файле.

Это работает так или иначе. Я не могу придумать лучшего примера.

Смежные вопросы