1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | -- Флаг поддержания работы скрипта IsRun = true; function main() -- Пытается открыть файл в режиме "чтения/записи" f = io.open(getScriptPath().."\\Test.txt","r+"); -- Если файл не существует if f == nil then -- Создает файл в режиме "записи" f = io.open(getScriptPath().."\\Test.txt","w"); -- Закрывает файл f:close(); -- Открывает уже существующий файл в режиме "чтения/записи" f = io.open(getScriptPath().."\\Test.txt","r+"); end; -- Записывает в файл 2 строки f:write("Line1\nLine2"); -- "\n" признак конца строки -- Сохраняет изменения в файле f:flush(); -- Встает в начало файла -- 1-ым параметром задается относительно чего будет смещение: "set" - начало, "cur" - текущая позиция, "end" - конец файла -- 2-ым параметром задается смещение f:seek("set",0); -- Перебирает строки файла, выводит их содержимое в сообщениях for line in f:lines() do message(tostring(line));end -- Закрывает файл f:close(); -- Цикл будет выполнятся, пока IsRun == true while IsRun do sleep(100); end; end; function OnStop() IsRun = false; end; |
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!
Есть ли способ из скрипта создать новую папку, например для записи лог файлов?
os.execute("mkdir " .. directory)
ок, спасибо, работает отлично
хорошо, пожалуйста
Каким способом можно удалить файл?
http://www.user.su/lua/
os.remove (filename)
Удалаяет файл или директорию с заданным именем. Директории должны быть пусты. Если функция
не может провести удаления, она возвращает nil, плюс строку, содержащую описание ошибки.
os.remove (filename)
Удалаяет файл или директорию с заданным именем. Директории должны быть пусты. Если функция
не может провести удаления, она возвращает nil, плюс строку, содержащую описание ошибки.
Здравствуйте. Скажите, есть ли функция, чтобы удостоверится, что файл уже открыт другим процессом ( ботом)? Т.е. хочу в один файл писать из разных роботов и чтобы не было конфликта, что бы робот "ждал" пока другой закончил чтение/запись и закрыл файл. Вроде, это что-то простое должно быть?
Файл открывается у меня для чтения local f = io.open(path, "r+")
Файл открывается у меня для записи local f = io.output(path)
Правда я не проверял, может уже будет "конфликт" и можно его "зафиксировать" и ждать...
только обрабатывая ошибки открытия файла. примерно так:
только нужно помнить, что не всегда ошибки будут возникать, так как для чтения можно открыть его сколько угодно раз. в lua нет способа явно указать, что файл нужно открыть для эксклюзивного доступа, разве что всегда открывать его в режиме записи, и для чтения тоже.
а в чем задача состоит? вы через файлы хотите сделать взаимодействие между роботами? если да, то вот есть решение лучше: quikluacsharp.ru/stati-uchastnikov/biblioteka-lua_share-obmen-dannymi-mezhdu-skriptami-i-prilozheniyami/
Задача: хотел просто в общий тхт файл кой какую статистику писать. Каждый робот пишет свое, но в один файл. Что бы его открыл и видишь в целом, что в Квике с торговлей происходит. У какого бота какая позиция, соответствует ли она общей позиции в квике и т.д.
посмотрите либу по ссылке, это как раз ваш случай. вы можете написать некий код, который будете вызывать из разных скриптов или даже разных квиков, и при этом у вас не будет проблем с доступом из разных скриптов/приложений.
спасибо, гляну
f = io.open(getScriptPath().."\\Test.txt","r+");
и почему в конце , "r+", что оно делает? И для чего нужна
f = io.open(getScriptPath().."\\Test.txt","r+");
Не могли бы Вы объеснить чуть краче , тоесть , что такое getScriptPath()..""\\
"и почему в конце , "r+", что оно делает? И для чего нужна" - это режим открытия файла r от слова read - чтение, знак + означает что можно еще и писать будет в файл, в итоге "r+" означает режим чтения/записи
"Не могли бы Вы объеснить чуть краче , тоесть , что такое getScriptPath()..""\\" - getScriptPath() это функция встроенная в QLua, которая возвращает полный путь к скрипту, из которого она вызвана, оператор ".." называется оператором конкатенации, т.е. служит для склеивания нескольких строк в одну. В итоге, если Ваш скрипт находится в папке "C:\\Trading", то в результате склейки получится строка "C:\\Trading\\Test.txt", двойной слеш используется для экранирования символа слеш, т.к. есть различные спецсимволы, которые содержат в себе слеш, например, "\n" означает перенос строки, и чтобы в строку добавить именно символ слеш, который компьютер не будет пытаться распознать как начало спецсимвола, нужно экранировать его вторым слешем.
Такой вопрос. Если я "поставил" курсор в нужное место, то я могу как-то "вставлять" или наоборот "затирать"?
Например, есть строка в файле : "Я иду в школу", "ставлю" курсор перед "школу" . Если я в это место впишу "любимую" , то получится: "Я иду в любимую" правильно? Т.е. школа затрется? А можно "вставить" чтобы получилось "... в любимую школу". Или запись в файл как раз наоборот работает - вставляет , а не затирает? Или может даже есть разные способы? Понятно что можно считать весь файл и работать уже с текстом и потом полностью перезаписать. А вот сразу в файл так нельзя писать в разных режимах?
Только перезаписывать поверх можно, вставлять нельзя, файл это область памяти выделенная, к ней можно только добавить в конец еще какой-то объем памяти. Это как строка в тетради написанная, Вы же не сможете внутрь нее еще слов вставить, только перезаписать поверх, или в конец добавить. С файлами так же.
Здравствуйте!
Подскажите а как из файла прочитать данные в переменную???
Спасибо!
Здравствуйте! В примере, в 25 строке в цикле каждая строка файла считывается в переменную line, а потом значение этой переменной выводится в сообщении (message)
Спасибо большое!!!!
Всегда пожалуйста!
День добрый.
как получить значение из последней строки в txt файле?
как получить значение из последний строки предпоследнего столбца в файле csv, или например 3 столбца?
Добрый день, готовых функций для этого нет, вариант только изобретать свои, используя функции работы со строками, потому что текстовый файл, это, по сути, один массив символов, в котором строки отделяются символами переноса строки "\n", в CSV файле то же самое, строки разделены символами "\n", а ячейки символами ";" чаще всего. Если Вам нужно работать с разными элементами файла, то попробуйте лучше вот эту технологию применить: https://quikluacsharp.ru/quik-qlua/sohranenie-parametrov-skripta-qlua-lua-mezhdu-zapuskami/
Там все сводится к удобной работе с таблицей lua, ее считыванием из файла, изменением и повторным сохранением в файл.
Добрый день!
Данный скрипт
Ошибка lua:6: attempt to index global 'f' (a nil value)
Помогите разобраться!
Здравствуйте! Ответьте себе на вопрос: "Что делает функция getScriptPath() и как она работает ?" Можете здесь посмотреть: https://quikluacsharp.ru/qlua-osnovy/servisnye-funktsii-qlua-lua/
Видно, что недостаточно базовых знаний по программированию, приглашаю на скайп-обучение 🙂
Добрый день!
Подскажите, как каталог создать?
Спасибо!
Добрый день.
folder = "mybot"
directory = "C:/Bot/"..folder
os.execute("mkdir " .. directory)