При выводе информации в лог-файл выводится тарабарщина. То есть информация заменяется на непонятные символы. Очевидно проблема в несовпадении кодировок медку Квиком и лог-файлом, но как ее решить?
В том то и дело - выводится все нормально в сообщениях - Quik понимает мою кодировку. При записи в файл информация записывается без изменений, а все остальное превращается в тарабарщину. Вот ссылка на изображение: http://wallmaker.ru/epic/view/qUHG3C6piUZj2WBUaZfitBe2. Как видите, вставил двойки, а все остальное стало фигнёй
Это не тарабарщина а символ нулевого кода в тестовой строке. Попробуйте отключить отображение управляющих символов в редакторе текста, на котором смотрите сообщение или убрать их из выводимой строки.
Возьмите sciTE он к тому же написан на луа и в него модно добавить различные примочки и более того в него встроен компилятор и даже есть с отладчиком луа ---------------------------- И будет Вам счастье
local file = io.open(ImyaCFGFaila, "w+") file:seek("set", 15) file:write("22") file:flush() file:close()
в режиме "w" получается такая же фигня, кодировка скрипта и лог-файла "windows-1251", в "UTF-8" и "ANSI" такая же фигня. Ранее в этом редакторе все работало, когда я писал такие скрипты, том более, что в нем я не только этим занимаюсь, поэтому менять редактор из-за одного непонятного затупа - это все равно, что весь танк списывать из-за того, что у него масляные фильтры засорились
можно и так local file = io.open(ImyaCFGFaila, "w+") file:write("22") file:flush() file:close() ------------------ file:seek("set", 15) - смещает на 15 байт - вот эти байты вы и видите в редакторе.
local file = io.open(ImyaCFGFaila, "r+") file:seek("set", 10) file:write("2234") file:flush() file:close() Все работает, и файл не ломается, а переменную писать он не хочет нормально (??????????????)
Еще одно наблюдение: необратимые изменения наступают в любом случае, когда файл открывается в режимах "w", даже если в ходе него не происходит ничего: ни записи информации, ни смещения курсора. Так в таком коде получаем из полного лог-файла тупорыло пустой:
local file = io.open(ImyaCFGFaila, "w+") file:flush() file:close()
Скажите, что это за фигня, а то у меня уже башка кружится. Таким образом, ведь дело не в моем кривом коде, и не в ошибочном хранении информации в буфере обмена (и в 32-битности), дело именно в режимах "w" и "w+", режим "а" работает корректно, но мне то надо именно заменять, а не просто приписывать информацию.
Можно и не смещать никуда курсор - те же яйца. И смещаю не в пустоту а там, где есть символы, если в пустоту сместить он так то ошибку викидывает сразу
Deserf пишет: Можно и не смещать никуда курсор - те же яйца. И смещаю не в пустоту а там, где есть символы, если в пустоту сместить он так то ошибку викидывает сразу
Простите но Вы именно смещаете в пустоту. Так как режим w+ перезаписывает файл. То есть стирает все и пишет по новой.
Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать. По скрипту скажу - это тоже не работает
Deserf пишет: Можно и не смещать никуда курсор - те же яйца. И смещаю не в пустоту а там, где есть символы, если в пустоту сместить он так то ошибку викидывает сразу
Простите но Вы именно смещаете в пустоту. Так как режим w+ перезаписывает файл. То есть стирает все и пишет по новой.
Прочитайте текст скрипта, который выше - я его ВООБЩЕ НИКУДА НЕ СМЕЩАЛ, а он все равно тупит
Еще раз пишу, режим w+ полностью затирает файл при открытии. Таким образом, если Вам нужно изменить уже имеющиеся данные в этом файле, ищите другой способ.
Deserf пишет: Прочитайте текст скрипта, который выше - я его ВООБЩЕ НИКУДА НЕ СМЕЩАЛ, а он все равно тупит
Читаю.
Код
local file = io.open(ImyaCFGFaila, "w+") --Открыли файл и стерли в нем все что есть, так как режим w+
file:seek("set", 15) --смефаем курсор на 15 символов в пустоту,, так как файл пустой.
file:write("22") --пишем строку "22" после 15 пустых символов
file:flush() --обновляем файл
file:close() -- закрываем
Еще читаю:
Код
local file = io.open(ImyaCFGFaila, "w+") --Открыли файл и стерли в нем все что есть, так как режим w+
file:flush() --обновляем файл
file:close() -- закрываем
function main() local ImyaCFGFaila=getScriptPath().."\\" .. "1.txt" local file = io.open(ImyaCFGFaila, "w") file:seek("set", 0) file:write(tostring("11")) file:seek("set", 6) file:write(tostring("....... его рот")) file:flush() file:close() end
Исходная строка в файле "1.txt" такая: "11111111111111111111111111111111111111111111111111111111111111111" (без всяких переносов и без кавычек) После работы скрипта: строка в файле "1.txt" такая: "11<NUL><NUL><NUL><NUL>....... его рот", где <NUL> - то самое. Как видите никакого смещения в пустоту.
Deserf пишет: Прочитайте текст скрипта, который выше - я его ВООБЩЕ НИКУДА НЕ СМЕЩАЛ, а он все равно тупит
Читаю.
Код
local file = io.open(ImyaCFGFaila, "w+") --Открыли файл и стерли в нем все что есть, так как режим w+
file:seek("set", 15) --смефаем курсор на 15 символов в пустоту,, так как файл пустой.
file:write("22") --пишем строку "22" после 15 пустых символов
file:flush() --обновляем файл
file:close() -- закрываем
Еще читаю:
Код
local file = io.open(ImyaCFGFaila, "w+") --Открыли файл и стерли в нем все что есть, так как режим w+
file:flush() --обновляем файл
file:close() -- закрываем
Deserf пишет: Прочитайте текст скрипта, который выше - я его ВООБЩЕ НИКУДА НЕ СМЕЩАЛ, а он все равно тупит
Читаю.
Код
local file = io.open(ImyaCFGFaila, "w+") --Открыли файл и стерли в нем все что есть, так как режим w+
file:seek("set", 15) --смефаем курсор на 15 символов в пустоту,, так как файл пустой.
file:write("22") --пишем строку "22" после 15 пустых символов
file:flush() --обновляем файл
file:close() -- закрываем
Еще читаю:
Код
local file = io.open(ImyaCFGFaila, "w+") --Открыли файл и стерли в нем все что есть, так как режим w+
file:flush() --обновляем файл
file:close() -- закрываем
function main() local ImyaCFGFaila=getScriptPath().."\" .. "1.txt" local file = io.open(ImyaCFGFaila, "w") file:seek("set", 0) file:write(tostring("11")) file:seek("set", 6) file:write(tostring("....... его рот")) file:flush() file:close() end
Исходная строка в файле "1.txt" такая: "11111111111111111111111111111111111111111111111111111111111111111" (без всяких переносов и без кавычек) После работы скрипта: строка в файле "1.txt" такая: "11<NUL><NUL><NUL><NUL>....... его рот", где <NUL> - то самое. Как видите никакого смещения в пустоту.
function main() local ImyaCFGFaila=getScriptPath().."\" .. "1.txt" local file = io.open(ImyaCFGFaila, "w") file:seek("set", 0) file:write(tostring("11")) file:seek("set", 6) file:write(tostring("....... его рот")) file:flush() file:close() end
Исходная строка в файле "1.txt" такая: "11111111111111111111111111111111111111111111111111111111111111111" (без всяких переносов и без кавычек) После работы скрипта: строка в файле "1.txt" такая: "11<NUL><NUL><NUL><NUL>....... его рот", где <NUL> - то самое. Как видите никакого смещения в пустоту.
Вас не удивляет что NUL символов 4 штуки? Может это потому что Вы смещаете курсор на шесть символов влево, в то время как в строке всего 2 символа? 6-2=4
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Deserf пишет: А как же тогда замену информации провернуть, тем более я раньше это делал?
Проще это делать так: ----------------------------- 1) создаете таблицу 2) читает в нее все из файла 3) меняете в таблице все, что хотите 4) пишите таблицу в файл (режим "w") ----------------------------- и будет Вам счастье