Блок Settings
Пользователь
Сообщений: 208
Регистрация: 28.11.2016
Здравствуйте. Имею в коде индикатора следующее: " local cl = {"TQBR","TQTF","RTSIDX","INDX"} local class = getDataSourceInfo().class_code if class == cl[1] or class == cl[2] or class == cl[3] or class == cl[4] or class == cl[5] or class == cl[6] or class == cl[7] or class == cl[8] or class == cl[9] or class == cl[10] then S = S1 end " Можно ли каким-то образом таблицу "cl" создавать в блоке Settings, чтобы в окне настроек индикатора через запятую забивать указанные классы?
Пользователь
Сообщений: 1240
Регистрация: 02.02.2015
миру мир!
Фактически вопрос можно ли строку, разделенную запятыми, преобразовать в таблицу lua Верно? это отличный запрос для гугла
Пользователь
Сообщений: 3708
Регистрация: 30.01.2015
Settings.cl="TQBR,TQTF,RTSIDX,INDX"
Пользователь
Сообщений: 1240
Регистрация: 02.02.2015
миру мир!
Николай, вы зачем обманываете?
Пользователь
Сообщений: 208
Регистрация: 28.11.2016
Это я уже пробовал. Неверный способ
Пользователь
Сообщений: 455
Регистрация: 20.04.2016
Цитата swerg написал: можно ли строку, разделенную запятыми, преобразовать в таблицу lua
вопрос не совсем понятен. Можно сделать все что угодно, вопрос в какую таблицу вам надо преобразовать?
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Цитата Русский написал: Николай Камынин написал: Settings.cl="TQBR,TQTF,RTSIDX,INDX"Это я уже пробовал. Неверный способ
Как раз таки это единственно верный способ.
Цитата swerg написал: можно ли строку, разделенную запятыми, преобразовать в таблицу lua
Например если разделитель точно запятые, то можно так:
Код function pack(...)
return arg
end
function str2tbl(str)
return assert(loadstring("return pack("..str..")"))()
end
tbl = str2tbl("123,456,789")
Пользователь
Сообщений: 208
Регистрация: 28.11.2016
Цитата Sergey Gorokhov написал: Например если разделитель точно запятые, то можно так:Код function pack ( .. .)
return arg
end
function str2tbl (str)
return assert(loadstring( "return pack(" .. str .. ")"))()
end
tbl = str2tbl( "123,456,789" )
Разделитель запятые - это не принципиально. Можно любой. Главное, чтобы можно было забить нужные классы через окно настройки индикатора.
Ваш способ либо не работает, либо я делаю что-то неправильно. Так как условие if не выполняется.
Код tbl = str2tbl( "123,456,789" )
В своём коде tbl я заменяю на cl и вместо 123,456,789 забиваю классы.
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Цитата Русский написал: Ваш способ либо не работает, либо я делаю что-то неправильно. Так как условие if не выполняется.
Это был пример не более (предоставляется как есть) и этот пример изначально предназначался для числовых данных.
Если данные строковые, то передавать в кавычках надо
tbl = str2tbl("'TQBR','TQTF','RTSIDX','INDX'")
Есть и другие способы, см интернет:
https://quik2dde.ru/viewtopic.php?id=105
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Цитата Sergey Gorokhov написал: Если данные строковые, то передавать в кавычках надо
или переписать пример, тогда будет работать как со строками так и с числами:
Код
function pack(...)
return arg
end
function str2tbl(str)
return assert(loadstring("return pack('"..string.gsub(str, ",", "','").."')"))()
end
function str2tbl2(str)
return string.gmatch(str, "([^,]+)")
end
tbl = str2tbl("TQBR,TQTF,RTSIDX,INDX")
Пользователь
Сообщений: 1519
Регистрация: 30.01.2015
Пользователь
Сообщений: 208
Регистрация: 28.11.2016
Цитата Sergey Gorokhov написал:Цитата Sergey Gorokhov написал: Если данные строковые, то передавать в кавычках надо
или переписать пример, тогда будет работать как со строками так и с числами:Код function pack ( .. .)
return arg
end
function str2tbl (str)
return assert(loadstring( "return pack('" .. string.gsub (str, "," , "','" ) .. "')"))()
end
function str2tbl2 (str)
return string.gmatch (str, "([^,]+)" )
end
tbl = str2tbl( "TQBR,TQTF,RTSIDX,INDX" )
Сергей, благодарю. Всё работает. Ещё подскажите, это сильно утяжеляет расчёт кода программой?
QUIK clients support
Сообщений: 3879
Регистрация: 23.01.2015
Цитата Русский написал: Сергей, благодарю. Всё работает. Ещё подскажите, это сильно утяжеляет расчёт кода программой?
По идее не должно.
Пользователь
Сообщений: 1519
Регистрация: 30.01.2015
Цитата Sergey Gorokhov написал:Цитата Русский написал: Сергей, благодарю. Всё работает. Ещё подскажите, это сильно утяжеляет расчёт кода программой?
По идее не должно.
assert утяжеляет сильно. В цикле его использовать нежелательно.
Пользователь
Сообщений: 208
Регистрация: 28.11.2016
Цитата s_mike@rambler.ru написал:Цитата Sergey Gorokhov написал:Цитата Русский написал: Сергей, благодарю. Всё работает. Ещё подскажите, это сильно утяжеляет расчёт кода программой?
По идее не должно.
assert утяжеляет сильно. В цикле его использовать нежелательно.
Понял, благодарю.
Пользователь
Сообщений: 208
Регистрация: 28.11.2016
Этот способ тоже подошёл, благодарю.