При выводе информации в лог-файл выводится тарабарщина
Пользователь
Сообщений: Регистрация: 01.07.2015
09.07.2015 11:31:44
При выводе информации в лог-файл выводится тарабарщина. То есть информация заменяется на непонятные символы. Очевидно проблема в несовпадении кодировок медку Квиком и лог-файлом, но как ее решить?
Пользователь
Сообщений: Регистрация: 01.04.2015
09.07.2015 12:25:47
Для начала выведи сообщение на экран (message). И скорее выведет ту же тарабарщину, а это ошибка расчетов.
Пользователь
Сообщений: Регистрация: 01.07.2015
10.07.2015 06:12:46
В том то и дело - выводится все нормально в сообщениях - Quik понимает мою кодировку. При записи в файл информация записывается без изменений, а все остальное превращается в тарабарщину. Вот ссылка на изображение: . Как видите, вставил двойки, а все остальное стало фигнёй
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2015 07:22:42
Это не тарабарщина а символ нулевого кода в тестовой строке. Попробуйте отключить отображение управляющих символов в редакторе текста, на котором смотрите сообщение или убрать их из выводимой строки.
Пользователь
Сообщений: Регистрация: 01.07.2015
10.07.2015 10:35:30
Тогда другой вопрос: кто знает, как отключается это отображение на notepad++
Пользователь
Сообщений: Регистрация: 30.01.2015
10.07.2015 14:27:09
Возьмите sciTE он к тому же написан на луа и в него модно добавить различные примочки и более того в него встроен компилятор и даже есть с отладчиком луа ---------------------------- И будет Вам счастье
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
11.07.2015 09:50:03
Хорошо бы увидеть либо код, выводящий в файл, либо файл лога выложите где-нибудь, посмотреть что у вас там за кодировка и как вы её добиваетесь
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 06:45:02
код вывода в файл допустим такой:
local file = io.open(ImyaCFGFaila, "w+") file:seek("set", 15) file:write("22") file:flush() file:close()
в режиме "w" получается такая же фигня, кодировка скрипта и лог-файла "windows-1251", в "UTF-8" и "ANSI" такая же фигня. Ранее в этом редакторе все работало, когда я писал такие скрипты, том более, что в нем я не только этим занимаюсь, поэтому менять редактор из-за одного непонятного затупа - это все равно, что весь танк списывать из-за того, что у него масляные фильтры засорились
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 06:47:55
Кстати, в режиме "а" дописывает в файл без проблем, он не ломается....
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2015 06:50:51
вообще-то, так как вы пишите сначала файла, то надо так local file = io.open(ImyaCFGFaila, "w") file:write("22") file:flush() file:close()
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2015 06:52:06
можно и так local file = io.open(ImyaCFGFaila, "w+") file:write("22") file:flush() file:close() ------------------ file:seek("set", 15) - смещает на 15 байт - вот эти байты вы и видите в редакторе.
Пользователь
Сообщений: Регистрация: 30.01.2015
13.07.2015 06:55:29
что касается редактора, то пользуйтесь несколькими. ----------------------------- Scite - для луа больше , чем реадктор - это среда разработки.
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 06:56:15
Так я если мне надо заменить старое значение на новое?
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 07:02:36
Еще что заметил. Допустим, вот так:
local file = io.open(ImyaCFGFaila, "r+") file:seek("set", 10) file:write("2234") file:flush() file:close() Все работает, и файл не ломается, а переменную писать он не хочет нормально (??????????????)
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 07:28:15
Правда это другой режим и запись со смещением
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 07:57:50
Кстати, количество "NUL" в каждом случае зависит от координат курсора
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 07:58:53
И не в редакторе дело, тоже самое получается в Notepad. Дело похоже в самой Quik и я не удивлен
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 07:59:21
Походу ей не нравятся 32-битные машины
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 08:25:18
Кто что может про разрядность ОСи сказать?
Пользователь
Сообщений: Регистрация: 23.01.2015
13.07.2015 08:31:50
Цитата
Deserf пишет: Кто что может про разрядность ОСи сказать?
При чем тут разрядность ОС? Вы смещаете курсор на 15 символов в пустоту, вот и получаете эту самую пустоту NUL.
Цитата
Deserf пишет: Дело похоже в самой Quik и я не удивлен
Это легко проверить, достаточно запустить код без QUIK на том же SiceTW
Еще одно наблюдение: необратимые изменения наступают в любом случае, когда файл открывается в режимах "w", даже если в ходе него не происходит ничего: ни записи информации, ни смещения курсора. Так в таком коде получаем из полного лог-файла тупорыло пустой:
local file = io.open(ImyaCFGFaila, "w+") file:flush() file:close()
Скажите, что это за фигня, а то у меня уже башка кружится. Таким образом, ведь дело не в моем кривом коде, и не в ошибочном хранении информации в буфере обмена (и в 32-битности), дело именно в режимах "w" и "w+", режим "а" работает корректно, но мне то надо именно заменять, а не просто приписывать информацию.
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 08:54:00
Можно и не смещать никуда курсор - те же яйца. И смещаю не в пустоту а там, где есть символы, если в пустоту сместить он так то ошибку викидывает сразу
Пользователь
Сообщений: Регистрация: 23.01.2015
13.07.2015 09:01:27
Цитата
Deserf пишет: Можно и не смещать никуда курсор - те же яйца. И смещаю не в пустоту а там, где есть символы, если в пустоту сместить он так то ошибку викидывает сразу
Простите но Вы именно смещаете в пустоту. Так как режим w+ перезаписывает файл. То есть стирает все и пишет по новой.
Пользователь
Сообщений: Регистрация: 23.01.2015
13.07.2015 09:08:35
Цитата
"r": read mode (the default);
"w": write mode;
"a": append mode;
"r+": update mode, all previous data is preserved;
"w+": update mode, all previous data is erased;
"a+": append update mode, previous data is preserved, writing is only allowed at the end of file.
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 09:12:33
Нашел одно решение, не ахти какое: запускаем программу
Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать. По скрипту скажу - это тоже не работает
Deserf пишет: Можно и не смещать никуда курсор - те же яйца. И смещаю не в пустоту а там, где есть символы, если в пустоту сместить он так то ошибку викидывает сразу
Простите но Вы именно смещаете в пустоту. Так как режим w+ перезаписывает файл. То есть стирает все и пишет по новой.
Прочитайте текст скрипта, который выше - я его ВООБЩЕ НИКУДА НЕ СМЕЩАЛ, а он все равно тупит
Еще раз пишу, режим w+ полностью затирает файл при открытии. Таким образом, если Вам нужно изменить уже имеющиеся данные в этом файле, ищите другой способ.
Пользователь
Сообщений: Регистрация: 23.01.2015
13.07.2015 09:18:12
Цитата
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() -- закрываем
Что не так?
Пользователь
Сообщений: Регистрация: 01.07.2015
13.07.2015 09:20:34
Хорошо, вот такой скрипт:
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
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.07.2015 09:29:45
Цитата
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Deserf пишет: А как же тогда замену информации провернуть, тем более я раньше это делал?
Проще это делать так: ----------------------------- 1) создаете таблицу 2) читает в нее все из файла 3) меняете в таблице все, что хотите 4) пишите таблицу в файл (режим "w") ----------------------------- и будет Вам счастье