string.gmatch

Страницы: 1
RSS
string.gmatch
 
Господа, помогите пожалуйста правильно написать пару символов.
ticker_list="SBER,GAZP"
for sec in string.gmatch(ticker_list,"%a+") do

end

Всё хорошо, всё работает.
А как перебирать тикер лист, если там есть фьючерсы? У них в конце цифра:
ticker_list="SBER,GAZP,SiU8"

Заменить литеру %a+ на %w+ - это я умею, но здесь надо учитывать оба варианта - литерные и литерно-цифровые.
Заранее спасибо
 
Добрый день.
на мой взгляд так проще:
Код
t={"123", "234", "qwe", "rty123"}

for _, v in ipairs(t) do
   print(v)
end
 
Цитата
Let_it_go написал:
Заменить литеру %a+ на %w+ - это я умею, но здесь надо учитывать оба варианта - литерные и литерно-цифровые.
Ну да, так и сделать, просто заменить на %w+... оно подразумевает, что будут выбираться как буквенно-цифровые совпадения, так и чисто буквенные или чисто цифровые. То-есть это объединение множеств букв и цифр.
 
Цитата
Let_it_go написал:
А как перебирать тикер лист, если там есть фьючерсы? У них в конце цифра:
ticker_list="SBER,GAZP,SiU8"

Стоит попробовать перебирать по группам символов, которые явно не являются разделителями:
for sec in string.gmatch(ticker_list,"[^,]+") do --группа символов, но не запятая
end
 
Добрый день.
По мне так проще написать отдельную функцию сплиттер и использовать ее, например, вот один из вариантов
Код
--разделяет строку на подстроки, используя текстовый разделитель. Возвращает таблицу подстрок
function split(str,sep)
   local fields = {}
   str:gsub(string.format("([^%s]+)", sep or "%s"), function(c) fields[#fields+1] = c end)
   return fields
end

ticker_list="SBER,GAZP"

for _, v in ipairs(split(ticker_list)) do
   print(v)
end
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Поправка, забыл указать разделитель
Код
--разделяет строку на подстроки, используя текстовый разделитель. Возвращает таблицу подстрок
function split(str,sep)
   local fields = {}
   str:gsub(string.format("([^%s]+)", sep or "%s"), function(c) fields[#fields+1] = c end)
   return fields
end

ticker_list="SBER,GAZP"

for _, v in ipairs(split(ticker_list,',')) do
   print(v)
end
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Спасибо
Остановился на варианте
Код
for sec in string.gmatch(list_MMVB..","..list_FORTS..","..list_CETS,"([^,]+)") do
 
Цитата
vgi написал:
for sec in string.gmatch(ticker_list,"[^,]+") do  --группа символов, но не запятая
Цитата
Let_it_go написал:
Код
for sec in string.gmatch (list_MMVB..","..list_FORTS..","..list_CETS,"([^,]+)") do
Тогда ещё пробельные не забудьте исключить... то-есть, так "[^%s,]+"
Страницы: 1
Читают тему
Наверх