Как разделить строку на отдельные числа?

Страницы: 1
RSS
Как разделить строку на отдельные числа?, Исторические данные
 
Скачивая исторические данные мы получаем построчно значения цены, каким образом записать в переменные отдельные значения цены в цикле ?
Код
GAZA [TQBR],15,20180220,160000,698.000000,700.000000,698.000000,700.000000,25.000000
GAZA [TQBR],15,20180220,161500,700.000000,700.000000,700.000000,700.000000,11.000000
GAZA [TQBR],15,20180220,163000,700.000000,700.000000,700.000000,700.000000,2.000000
GAZA [TQBR],15,20180220,170000,696.000000,696.000000,695.000000,695.000000,3.000000
(Lua вроде бы, это надстройка на с++ или дополнительные библиотеки) и тогда по идее в lua должны работать все функции си, так вот в си есть замечательный оператор
Код
"вася/петя/саша".Split('/');
для деления строки по символу в массив значений , можно ли на lua воспользоваться этим методом и если можно, то как? А если нельзя, то как это можно сделать? (мне бы хотелось получить числа, начиная с 5й по счету колонки и до конца).
человек (не робот)
 
Я вот тут находил полезную функцию. просто вставляешь ее в код и далее:
Код
S = "Hello//World";
S.split("//");

for i = 1,#S
    message(S[i]);
end
 
Цитата
Андрей написал:
Я вот тут находил полезную
Спасибо большое, попробую. (Такое ощущение что раздвоение личности, сам себе пишу. И сам себе отвечаю. Но у нас количество сообщений разное)
человек (не робот)
 
Да, забавно получилось)) (количество сообщений разное, но зато зеркальное)
 
Цитата
Андрей написал:
но зато зеркальное
было зеркальным))
 
нет, что то не хочет работать
Код
function main()
local s1={};
 S = "Hello//World";
--s1=S.split("//");
S.split("//");
message(S[1]);
    --message(S1[1]);

end
, ругается, похоже на то, что lua никто не объяснил, что он должен понимать этот метод, вот как ему дать понять, что он умеет с ним работать?
Код
lua:12: attempt to call field 'split' (a nil value)
lua: 12: попытка вызвать поле «split» (значение nil)
человек (не робот)
 
Цитата
Андрей написал:
ругается, похоже на то, что lua никто не объяснил, что он должен понимать этот метод
Его и нету в луа. Но я сверху добавил ссылку на аккаунт какого то парня на Гихабе, кто сделал жто дополнение. ниже привожу код с его аккаунта. Этот код нужно просто вставить в луа скрипт и тогда все заработает.
Код
function string:split(delimiter)  
    local result = { }  
    local from  = 1  
    local delim_from, 
    delim_to = string.find( self, delimiter, from  )  
    while delim_from do    
        table.insert( result, string.sub( self, from , delim_from-1 ) )    
        from  = delim_to + 1    
        delim_from, delim_to = string.find( self, delimiter, from  )  
    end  
    table.insert( result, string.sub( self, from  ) )  
    return result
end
 
Вот так вот, правильнее вставить будет: (в прошлом сообщении один лишний перенос строки был)
Код
function string:split(delimiter)  
    local result = { }  
    local from  = 1  
    local delim_from, delim_to = string.find( self, delimiter, from  )  
    while delim_from do    
        table.insert( result, string.sub( self, from , delim_from-1 ) )    
        from  = delim_to + 1    
        delim_from, delim_to = string.find( self, delimiter, from  )  
    end  
    table.insert( result, string.sub( self, from  ) )  
    return result
end
 
Цитата
Андрей написал:
Вот так вот, правильнее вставить будет:
спасибо, в ссылку я видимо не вьехал, сделал по кривому,
Код
function main()

local s1={};
local n1=0;
local S="GAZA [TQBR],15,20160519,114500,432.20,432.45,430.64,431.00,16.00";
 for word in string.gmatch(S, "%d+") do
 n1=n1+1;
 s1[n1]=word
 end
 for i=4,13,2 do
 message(s1[i]..'.'..s1[i+1]);
 sleep(1000);
 end

end

попробую понять ваше предложение
человек (не робот)
 
И я кое где ошибся тоже) но метод точно рабочий.

пример немного иначе писать нужно было (в луа функции через двоеточие вызываются, а не через точку) :
Код
function main()
    local s1={};
    S = "Hello//World";
    s1=S:split("//");
    message(sl[1]);
    message(sl[2]);
end
 
Не, толку не хватило разобраться, попробую еще позднее подумать, с функциями у  меня слабовато идет. Да и не понял еще с каким отладчиком надежнее работать, сперва decoda понравился, потом заметил, что он капризно работает, quik подвешивает иногда, еще видел ссылки на SciTE что тоже нравится людям и как редактор и как отладчик, попробую еще на нем, а ваш код крутил, вертел, что то не хочет работать. Ругается.
Код
lua:80: unexpected symbol near 'С' (в коде всего 23 строки, 80 и нет совсем, откуда он ее взял)
Код
function string:split(delimiter)
    local result = { }
    local from  = 1
    local delim_from, delim_to = string.find( self, delimiter, from  )
    while delim_from do
        table.insert( result, string.sub( self, from , delim_from-1 ) )
        from  = delim_to + 1
        delim_from, delim_to = string.find( self, delimiter, from  )
    end
    table.insert( result, string.sub( self, from  ) )
    return result
end


function main()

 S = "Hello,World";

S:split(",");
message(result[1]);

end
человек (не робот)
 
Раз уж я взялся отвечать, то попробую до конца помочь))
Снизу полный рабочий пример =)
Код
function main()

   S = "Hello,World";
   
   res = S:split(",");
   message(res[1]);
   message(res[2]);
   
end;

function string:split(delimiter)
    local result = { }
    local from  = 1
    local delim_from, delim_to = string.find( self, delimiter, from  )
    while delim_from do
        table.insert( result, string.sub( self, from , delim_from-1 ) )
        from  = delim_to + 1
        delim_from, delim_to = string.find( self, delimiter, from  )
    end
    table.insert( result, string.sub( self, from  ) )
    return result
end
 
Цитата
Андрей написал:
Раз уж я взялся отвечать, то попробую до конца помочь))
Спасибо большое, тяжело признаваться в тупости, но стараюсь разобраться с проблемой до конца по возможности, разрешите еще спросить, на чем можно отлаживать код? Мне нужен простого пошаговый режим при отладке с выводом значений переменных и все (без изысков), так и не могу понять в какой программе это можно делать.
человек (не робот)
 
Я не люблю луа, так что с ним приходится только для примеров сталкиваться. делаю сейчас для себя некий API простенький для подключения к квику из С++. А Луа использую только что бы примеры функций написать (а далее их уже переписываю на плюсах). Так что с отладчиком не помогу к сожалению.
 
Конструкция типа:
Код
string.gsub(s, "(%d+%.*%d*)", function (n) table.insert(t, tonumber(n)) end)
отловит в строке s все числа, в т.ч. содержащие десятичную точку и поместит их в таблицу t в виде чисел. Если нужно отлавливать еще и отрицательные числа, то в начале строки шаблона нужно добавить "[+-]?"

Аналог функции split в lua:
Код
delimiter = ","
string.gsub(s .. delimiter , "(.-)%" .. delimiter, function (w) table.insert(t, w) end)
 
Цитата
Андрей написал:
Так что с отладчиком не помогу к сожалению.
Ясно, спасибо
человек (не робот)
 
Цитата
Алексей написал:
отловит в строке s все числа, в т.ч. содержащие десятичную точку и поместит их в таблицу t
Спасибо большое, Ваш код более поятный
человек (не робот)
 
Цитата
Андрей написал:
Я не люблю луа, так что с ним приходится только для примеров сталкиваться
Это конечно дело каждого на вкус и цвет как говориться суда нет, но пишут, что lua самый быстрый язык, а это для квика принципиально, так как  тиковые значения идут в микросекундах, если не в нано, а с++ под виндой работает в лучшем случае от 20 миллисекунд и выше, хотя платформа windows  и там и тут, и откуда в lua обозначено время в микросекундах не очень мне понятно, но я только начал разбираться, может со временем что-то прояснится. И второе мне почему то кажется, что один язык работает лучше чем 2 вместе, с++ ведь все равно использует библиотеки lua при роботе.Но в любом случае, вы мне очень помогли, спасибо.
человек (не робот)
Страницы: 1
Читают тему
Наверх