String Split
Muchas veces requerimos separar una cadena que posee tokens. Por ejemplo imaginemos que tenemos la cadena:
01/01/2000;434.3;54455.2;S;NEW
En este caso nos interesa separar la información contenida entre los separadores conformados por el ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-- Separa un string según el patrón que le pasemos function split(str, pat) local t = {} -- NOTE: use {n = 0} in Lua-5.0 local fpat = "(.-)" .. pat local last_end = 1 local s, e, cap = str:find(fpat, 1) while s do if s ~= 1 or cap ~= "" then table.insert(t,cap) end last_end = e+1 s, e, cap = str:find(fpat, last_end) end if last_end <= #str then cap = str:sub(last_end) table.insert(t, cap) end return t end |
Command Pipe (#GNU)
Algunas veces requerimos llamar a un comando desde Lua para obtener algún dato en particular. La forma sería utilizando la función siguiente:
1 2 3 4 5 6 7 8 |
function pipeCmd (cmd) local ret local command = io.popen(cmd) local tmp = command:read("*a") io.close(command) ret = string.gsub(tmp, "\n", "") -- Remove line break return ret end |
Un ejemplo de como utilizarla sería llamar al comando date con cierto formato de retorno:
1 2 3 |
function today () return pipeCmd ("date +'%Y%m%d'") end |
Fixed Decimals
Algunas veces se requiere formatear un número de coma flotante a una cierta cantidad de decimales. La siguiente función recibe cómo parámetro el número a formatear, junto a la cantidad de decimales que se quieren fijar.
1 2 3 |
function round2(num, idp) return tonumber(string.format("%." .. (idp or 0) .. "f", num)) end |