Здравствуйте. Имею в коде индикатора следующее: " 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, чтобы в окне настроек индикатора через запятую забивать указанные классы?
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
28.11.2016 17:20:01
Фактически вопрос можно ли строку, разделенную запятыми, преобразовать в таблицу lua Верно? это отличный запрос для гугла
Пользователь
Сообщений: Регистрация: 30.01.2015
28.11.2016 18:18:51
Settings.cl="TQBR,TQTF,RTSIDX,INDX"
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
28.11.2016 20:03:40
Николай, вы зачем обманываете?
Пользователь
Сообщений: Регистрация: 28.11.2016
28.11.2016 20:07:43
Цитата
Николай Камынин написал: Settings.cl="TQBR,TQTF,RTSIDX,INDX"
Это я уже пробовал. Неверный способ
Пользователь
Сообщений: Регистрация: 20.04.2016
28.11.2016 22:08:52
Цитата
swerg написал: можно ли строку, разделенную запятыми, преобразовать в таблицу lua
вопрос не совсем понятен. Можно сделать все что угодно, вопрос в какую таблицу вам надо преобразовать?
Пользователь
Сообщений: Регистрация: 23.01.2015
29.11.2016 05:57:32
Цитата
Русский написал: Николай Камынин написал: 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")
Пользователь
Сообщений: Регистрация: 28.11.2016
29.11.2016 09:08:56
Цитата
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 забиваю классы.
Пользователь
Сообщений: Регистрация: 23.01.2015
29.11.2016 09:25:13
Цитата
Русский написал: Ваш способ либо не работает, либо я делаю что-то неправильно. Так как условие if не выполняется.
Это был пример не более (предоставляется как есть) и этот пример изначально предназначался для числовых данных. Если данные строковые, то передавать в кавычках надо tbl = str2tbl("'TQBR','TQTF','RTSIDX','INDX'")
Есть и другие способы, см интернет:
Пользователь
Сообщений: Регистрация: 23.01.2015
29.11.2016 09:28:29
Цитата
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")