2016-07-01 2 views
1

У меня есть следующий код в Lua:Lua: Как получить десятичное число из строки?

function getSystemLoad() 
    local file = io.popen('./check_cpu.pl') 
    local value = file:read('*l') 
    file:close() 
    return value 
end 

Выходом этой функции может быть: CPU OK: 0,51% или CPU ПРЕДУПРЕЖДЕНИЕ: 76,5%

Мне нужна эта функция возвращать только десятичное число, в этих случаях 0,51 или 76,5

+2

'return tonumber (value: match" ([% d.] +) %% ")' –

+0

@EgorSkriptunoff Лучше сделайте это '(% d +%.% D +) %%', чтобы не совпадать с несколькими точками, даже если в этот конкретный случай, по-видимому, этого не может произойти. – tonypdmtr

+0

@tonypdmtr - это не работает для 'CPU ПРЕДУПРЕЖДЕНИЕ: 100%' –

ответ

1
local function extractDecimalFrom(str) 
    local t = {} 
    for i in string.gmatch(str, "[0-9]+%.[0-9]+") do 
    t[#t+1] = tonumber(i) 
    end 
    return t 
end 

local s = "CPU OK: 0.51% or CPU WARNING: 76.5%" 

local extractedDecimals = extractDecimalFrom(s) 

for i=1, #extractedDecimals do 
    print(extractedDecimals[i]) 
end 
+1

Литература: http://lua-users.org/wiki/SplitJoin https://docs.coronalabs.com/daily/guide/data/luaString/index. html # patterns –

+0

Спасибо. Мне нужна эта функция, чтобы вернуть десятичное число, чтобы не печатать его на stdout. Я сделал это сам, используя ваше предложение, оно работает, но код выглядит немного громоздким, потому что я очень новичок в Lua. Не могли бы вы PLZ предложить короткий вариант для моей функции, чтобы вернуть десятичную? – Syb3rian

+1

Я изменил код, чтобы обернуть его в функцию, которая теперь вернет только первое найденное десятичное число. Учитывая, что ваш ожидаемый вход будет содержать только одно десятичное число, он должен работать на вас. Вы можете просто вызвать return с помощью gmatch внутри тома и уменьшить его. –

Смежные вопросы