Algunas funciones muy útiles para usar con Lua – Parte 1

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s