Em exemplos anteriores utilizamos a print para impressão de dados, mas essa função
não possui suporte a formatação além da impressão em forma tabular.
Para exibição de dados formatados, Lua possui a função format que permite a utilização
de caracteres de escape, identificadores de formatação e outros.
Sintaxe
string.format(formatstring,...)
Onde
formatstring: string com identificadores de formatação
...: lista de argumentos para formatação
Identificadores básicos para formatação:
- %d: inteiro
- %f: float
- %s: string
- %x: hexadecimal
- %o: octal
- %q: valor entre aspas
Exemplo 6
--char
print(string.format("%sello World",'H'))
-- string
print(string.format("Hello %s","World"))
--string entre aspas duplas
print(string.format("Hello %q","World"))
--inteiro
print(string.format("inteiro: %d",7))
--octal
print(string.format("%o",8))
--hexadecimal
print(string.format("%x", 255))
print(string.format("%02X", 10))
print(string.format("%04X", 256))
Saída
Hello World
Hello World
Hello "World"
7
10
ff
0A
0100
Formatação com alinhamento
O alinhamento de dados pode ser feito utilizando informações de tamanho de campo e alinhamento
à esquerda ou direita.
Sintaxe
%[-]PNidentificador
Onde
[-]: Alinhamento à esquerda. Se não usado, torna-se à direita.
N: tamanho do campo onde o valor será alinhado
P: caractere de preenchimento
identificador: identificador de formatação
Exemplo 7
--inteiro justificado a direita com 7 dígitos
print(string.format("%7d",7))
--inteiro justificado a esquerda com 7 dígitos
print(string.format("%-7d outras informações",7))
--inteiro justificado a direita com 0
print(string.format("%07d",7))
Saída
7
7 outras informações
0000007
Os valores que utilizem tipo de dado ponto flutuante podem ter ser dígitos controlados para
exibição de acordo com à sintaxe abaixo:
Sintaxe
%.N
Onde
N: número de dígitos de precisão para exibição
Exemplo 8
--float
print(string.format("%f", 7.777))
--arredondamento : 2 casas decimais
print(string.format("%.2f", 7.777))
Saída
7.777000
7.78
A precisão vista acima tem um significado diferente quando aplicada ao tipo string. Nesse
tipo a precisão limita a quantidade de caracteres exibidos na saída padrão.
Exemplo 8
local x = "string"
print(string.format("%.3s",x))
Saída
str