Я вовсе не опытный программист, и ответ на эту проблему, вероятно, покажет явное отсутствие понимания какого-либо критического компонента, но я пытаюсь открыть текстовый файл и сохранить каждую строку в таблице.Затем я хочу перебрать строки и выполнить некоторые манипуляции со строками, чтобы получить только критические части строки, которые мне нужны, и сохранить это значение в переменной.Затем у меня есть код для изменения значения переменной с помощью ползунка imgui, затем у меня есть кнопка, которая запускает некоторый код для записи новых значений обратно в текстовый файл.У меня проблема в том, что я перебираю файл с помощью ipairs, и он находит первый шаблон текста, а затем анализирует его так, как мне нужно, и сохраняет содержимое в предопределенном имени переменной.Как мне заставить его перейти к следующей строке и сохранить это значение в другом предопределенном имени переменной, даже если результаты манипуляции со строками имеют то же значение?Должен ли я использовать динамические переменные?Я понятия не имею, как это сделать.Проблема в том, что я буду запускать этот плагин на многих различных текстовых файлах с разным количеством строк и значений, причем некоторые значения будут идентичны.
Вот фрагмент текстового файла и его вид,Я пытаюсь предоставить ползунки для изменения номера после строк DEG_PER_ACTION.
Выбор топлива
BEGIN_MANIP command_knob laminar/c172/fuel_selector_up laminar/c172/fuel_selector_dwn
DEG_PER_ACTION 1
END_MANIP
BEGIN_MANIP command_knob laminar/c172/ignition_up laminar/c172/ignition_down
DEG_PER_ACTION 2
HOLD_MANIP
END_MANIP
if knob_read_init == false then -- flag to do this one time, start the reading of the current vrconfig, save lines to table.
local file = io.open(AIRCRAFT_PATH ..string.sub(AIRCRAFT_FILENAME, 0, -5).."_vrconfig.txt", "r+") -- any aircraft's vrconfig
io.input(file) -- open the file
knob_table = {} -- create a table called knob_table
for line in file:lines() do -- insert each line into a table's position
table.insert (knob_table, line)
end
------Read and Register Knob Names based on Commands or Datarefs----
for index, value in ipairs(knob_table) do -- here we start parsing to find the first instance of a command knob
if string.sub(value, 1, 1) ~= '#' then -- if the line doesn't start with a #
if string.match(value, "/") then -- if the line has a / in it, i.e. datarefs, commands
if string.match(value, "BEGIN_MANIP command_knob") then -- if it's a command knob
value = string.gsub(value, "BEGIN_MANIP command_knob", "") -- get rid of the first part of the line and save only the command/dataref to the value
knobOne = value -- store that value in a variable called knobOne, this is now our knob's name.
end
end
end
end
for index, value in ipairs(knob_table) do
if string.sub(value, 1, 1) ~= '#' then
if string.match(value, "/") then
if string.match(value, "BEGIN_MANIP command_knob") then
value = string.gsub(value, "BEGIN_MANIP command_knob", "")
if value ~= knobOne then -- the same iterator as above, but this line allows it to find the next one.
knobTwo = value -- stores value in knobTwo
end
end
end
end
end
-------Read and Register Old knob sensitivity numbers (deg_per_action) and store them in a variable------
for index, value in ipairs(knob_table) do
if string.sub(value, 1, 1) ~= '#' then
if string.match(value, "DEG_PER_ACTION") then
value = string.gsub(value, "DEG_PER_ACTION", "") -- sub out the text, leaving only the number
k1s = value -- store the number in a variable called k1s (stands for knob One Speed)
end
end
end
for index, value in ipairs(knob_table) do
if string.sub(value, 1, 1) ~= '#' then
if string.match(value, "DEG_PER_ACTION") then
value = string.gsub(value, "DEG_PER_ACTION", "")
if value ~= k1s then -- allows to go on to next deg_per_action line? needs work.
k2s = value
end
end
end
end
io.close(file)
knob_read_init = true -- boolean sets flag to true so that the above only happens once.
-----then i write the lines back in, using a boolean flag hack to write them separately -----
if imgui.Button (' Write File ') then
file = io.open(AIRCRAFT_PATH ..string.sub(AIRCRAFT_FILENAME, 0, -5).."_vrconfig.txt", 'w')
k2sflag = 0
for index, value in ipairs(knob_table) do
if string.match(value, "DEG_PER_ACTION") and k2sflag == 0 then
file:write ("DEG_PER_ACTION ", k2s..'\n')
k2sflag = 1
elseif string.match(value, "DEG_PER_ACTION") then
file:write ("DEG_PER_ACTION ", k1s..'\n')
else
file:write(value..'\n')
end
end
io.close(file)
Это работает для предопределенного текстового файла, но я хочу сделать это со многими различнымитекстовые файлы с разным количеством строк DEG_PER_ACTION, а также с разными значениями, включая много одинаковых значений, поэтому я не думаю, что строка «if value ~ = k1s» действительно не работает?