Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Alex Bodrov
0 / 0 / 0
Регистрация: 19.02.2017
Сообщений: 5
1

Поправить скрипт LUA

19.02.2017, 18:23. Просмотров 1118. Ответов 9
Метки нет (Все метки)

Здравствуйте!

Уважаемые, возникла необходимость подправить скрипт в LUA, и мне нужна помощь в небольшом изменении этого скрипта.
Задача следующая. Некий скрипт создаёт файл txt и записывает в него некие параметры, которые меняются в реальном времени. Но пишет он их в строки c добавлением. Хочется чтобы он писал эти параметры в одну строку, т.е. чтобы она постоянно обновлялась, а не дополнялась.

Вот сам скрипт:

C#
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
37
38
39
40
41
42
43
-- "Record to TXT" example data logging LUA plug-in
-- Open an exisitng "record.txt" file to append to, or create it if it doesn't exist
-- By using "assert" you get an error message if this fails
 
f = assert(io.open("test.txt","a+"))
 
--  note the elapsed mSecs count now so can provide relative mSec timing column
time0 = ipc.elapsedtime()
 
-- Loop until our Flag 0 is set 
while not ipc.testflag(0) do
 
-- Set the timestamp for this loop
time = ipc.elapsedtime() - time0
 
-- Read all the data 
alt = ipc.readStruct(0x0560,"3DD", "2SD", "1UD")
 
-- now convert them all from units into those we normally recognise
 
alt = alt * 3.28084 / (65536 * 65536)
 
 
-- but only log this time IF we aren't in an FS menu, or loading scenery
-- (check the "ready-to-fly" flag word at 3364)
-- and provided we are not paused (flagged at 0264)
 
 
if (ipc.readUW(0x3364) == 0) and (ipc.readUW(0x0264) == 0) then
 
   -- write a txt line to the open file
 
   f:write(string.format("%.1f\n", alt))
end
 
-- 20 times per second, roughly (allow 2 mSecs overhead)
ipc.sleep(48)
 
end
 
-- tidy up at end ...
f:write("\n")
f:close()
Результат примерно выглядит таким образом:

C++
1
2
3
4
5
6
7
alt
21.8
21.8
21.8
21.8
21.8
......
я хочу только чтобы выводилась одна строка и обновлялась в соответствии с изменяемыми параметрами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2017, 18:23
Ответы с готовыми решениями:

Lua Socket TCP/IP скрипт зависает
Использую чпу для резки лазером. Язык расширения у неё Lua. Соединение по...

Есть Lua скрипт но он не запускаеться а код не читаем
Здравствуйте есть lua скрипт помогите его раскодировать,он когда в блокноте или...

LUA + C++
Привет всем :) я чото не понимаю чо у меня выевляется ошибки luaavg.obj...

Установка Lua
Здравствуйте! Подскажите, пожалуйста как это сделать: Что бы вы могли...

vs c++ & lua
Здравствуйте, занимаюсь разработкой 3д игры, пишу движок и прочее, когда то...

9
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
19.02.2017, 22:50 2
Тогда файл нужно открывать в другом режиме, наверно в "r+".
И после перед выводом write нужно сделать seek на начало файла
0
Alex Bodrov
0 / 0 / 0
Регистрация: 19.02.2017
Сообщений: 5
20.02.2017, 06:14  [ТС] 3
Да, я пробовал менять режимы и r+ ставил, не помогает. А когда ставил seek, то он тогда не обновляет строку, выводит только один раз.
0
greg zakharov
Покинул форум
1958 / 830 / 240
Регистрация: 07.05.2015
Сообщений: 1,670
20.02.2017, 12:16 4
Alex Bodrov, нужно перезаписывать строку в файле? Если да, то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
--[[ Создаем текстовый файл
local f = io.open("test.txt", "w")
f:write("alt")
f:close()
--]]
 
-- Считываем содержимое файла
local f = io.open("test.txt", "r")
local c = f:read("*all")
f:close()
 
-- Так как файл представляет однострочник
-- просто изменяем значение
c = string.gsub(c, "alt", "2.81")
 
-- Записываем новое значение
local f = io.open("test.txt", "w")
f:write(c)
f:close()
0
Alex Bodrov
0 / 0 / 0
Регистрация: 19.02.2017
Сообщений: 5
20.02.2017, 20:33  [ТС] 5
greg zakharov, спасибо большое за ответ! Вроде получилось. Строка теперь одна и обновляется.

Но теперь еще другой вопрос:
я вижу обновленные данные когда только открываю файл, так сказать "онлайн" не отображается добавленная строка с переменными значениями.
Смысл сей затеи в том, что я захватываю этот файл OBS, и мне надо чтобы в него шла инфа в "реальном времени" ну те же часы например.

Я хочу получить результат, который был бы похож на программу SNaz. Если встречали её, то там идея в том, что прога считывает либо системное время, либо другие параметры компа (проц, темпру и тп.) и кидает это все в текстовый файл. Ну а с него уже потом уже удобно захватывать эту инфу.
Мне же надо считать значения с игры.

Возможно реализовать такое с моим скриптом в Lua?

Спасибо.
0
greg zakharov
Покинул форум
1958 / 830 / 240
Регистрация: 07.05.2015
Сообщений: 1,670
20.02.2017, 22:02 6
Alex Bodrov, реализовать то можно, правда в чем сакральный смысл сего? Писать в файл, чтобы его тут же читать, как-то однако. Обычно в файл выгружаются данные, служащие отправной точкой работы программы при ее последующую запуске, в тех же играх, например, сохранение рекордов, последнего результата и т.д., а, скажем, для таймера или чего-то в этом роде лучше отводить переменную в самом коде - проще высчитывать дельту времени.
0
Alex Bodrov
0 / 0 / 0
Регистрация: 19.02.2017
Сообщений: 5
21.02.2017, 12:06  [ТС] 7
greg zakharov, И, тем не менее, каким образом это возможно попробовать сделать? Сакральный смысл в этм есть, так бы я не выносил мозг ни себе не людям))) просто ни разу не программист и код lua увидел впервые неск дней назад...

Сейчас на даный момент удалось добиться следующего: скрипт пишет параметры моей игры в одну строчку все как надо. На запуск скрипта в игре у меня подключена горячая клавиша. Так вот чтобы происходило обновление данных, нужно постоянно ее нажимать, итогда выводятся обновленные значения. Хотелось бы чтобы все это работало автоматически.
0
greg zakharov
Покинул форум
1958 / 830 / 240
Регистрация: 07.05.2015
Сообщений: 1,670
21.02.2017, 22:26 8
Alex Bodrov, поверьте, смысл в том не шибко велик, но если настаиваете - циклы Вам в помощь.
0
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
24.02.2017, 12:04 9
Цитата Сообщение от greg zakharov Посмотреть сообщение
циклы Вам в помощь.
Тут скорее всего нужны не циклы, а таймер.
При нажатии на кнопку "обновить данные" функция делает своё дело и запускает таймер, который запустит эту функцию повторно через какое-то время.
0
Alex Bodrov
0 / 0 / 0
Регистрация: 19.02.2017
Сообщений: 5
24.02.2017, 20:34  [ТС] 10
ProgJ, надо попробовать) спасибо! еще не занимался кодом, и предыдущий совет про циклы еще не делал пока.
0
24.02.2017, 20:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2017, 20:34

Парсер на lua
Тут описано как подключить и использовать и библиотеку для языка lua...

Lua 5.3 и LuaJit
Возможно ли совместить subj в проекте одновременно? Требуется часть скриптов...

*.lua in *.exe
Кто знает как скрипт на луа компилить в исполняемый файл, подскажите, хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru