Exemplos de Scripts Lua

A seguir apresentamos alguns exemplos de código Lua aplicados a tarefas recorrentes de programação.

Manipulação de Arquivos

local fd = io.open("c:\\teste.txt", "wb")
fd:write("um\r\n")
fd:write("dois\r\n")
fd:write("tres\r\n")
fd:close()

fd = io.open("c:\\teste.txt", "rb")
local data = fd:read("*all")
fd:close()

print(data)

Manipulação de Data/Hora

print(os.date())
-- 09/16/10 13:59:32
print(os.date("(%a) %H:%M:%S %Y-%m-%d "))
-- (Thu) 14:01:20 2010-09-16

-- benchmark
local s = 0
local begin_time = os.clock()
for i=1,10000000 do s = s + i end
print("Duração " ..  os.clock() - begin_time)
-- Duração 0.40600000000006

Manipulação de Texto

local msg="Alarme de Temperatura CRÍTICA ATINGIDA: 78°C (Limite: 50°C)"

-- Operações de transformação

print(string.lower(msg))
-- alarme de temperatura crítica atingida: 78°c (limite: 50°c)

print(string.upper(msg))
-- ALARME DE TEMPERATURA CRÍTICA ATINGIDA: 78°C (LIMITE: 50°C)

-- Cálculo do comprimento do texto

print(string.len(msg))
-- 59

-- Recorte do texto

print(string.sub(msg,10,-15))
--  Temperatura CRÍTICA ATINGIDA: 78°C

-- Busca de sub-texto e Casamento de padrões

print(string.find(msg, "Temperatura"))
-- 11

print(string.match(msg, "%d+°C"))
-- 78°C

for i in string.gmatch(msg, "%d+°C") do
   print("Achei "..i)
end
-- Achei 78°C
-- Achei 50°C

print(string.gsub(msg, "°C","°F"))
-- Alarme de Temperatura CRÍTICA ATINGIDA: 78°F (Limite: 50°F)

-- Formatação de texto

print(string.format("O valor aprox. de PI é %.4f", math.pi))
-- O valor aprox. de PI é 3.1416

Funções Matemáticas Nativas

print(math.random())
-- 0.010559404278695
print(math.sin(math.pi/2))
-- 1
print(math.cos(math.pi))
-- -1
print(math.floor(math.pi))
-- 3
print(math.ceil(math.pi))
-- 4
print(2^10)
-- 1024
print(math.log10(1000))
-- 3
print(math.max(1,3,100,23))
-- 100
print(math.min(1,3,100,23))
-- 1

Funções de Depuração

-- examinando conteúdo do módulo math da biblioteca padrão
for i in pairs(math) do
   print(i)
end

-- inspeção de tabela t, imprime "chave : valor (tipo do valor)"
for k,v in pairs(t) do
  print(k .. ":" .. tostring(v) .. "(" .. type(v) .. ")")

Uso do módulo debug

-- funções aninhadas
function a()
 print("ok")
 print(debug.traceback())
end

function b()
 a()
end

function c()
 b()
end

c()

-- inspeção da função em execução
level = debug.getinfo(1)
print("Função" .. level.name)
print("Codigo Fonte\n" .. level.source .. "\n")
print("Linha Corrente" .. level.currentline)
print("Numero de upvalues" .. level.nups)

print("\n\n")