Escolar Documentos
Profissional Documentos
Cultura Documentos
Manzano
Novatec
Copyright © 2018 da Novatec Editora Ltda.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução
desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e
da Editora.
Editor: Rubens Prates
Revisão gramatical: Tássia Carvalho
Editoração eletrônica: Carolina Kuwabata
Capa: Carolina Kuwabata
ISBN: 978-85-7522-671-1
Histórico de edições impressas:
Abril/2018 Primeira edição
Novatec Editora Ltda.
Rua Luís Antônio dos Santos 110
02460-000 – São Paulo, SP – Brasil
Tel.: +55 11 2959-6529
Email: novatec@novatec.com.br
Site: www.novatec.com.br
Twitter: twitter.com/novateceditora
Facebook: facebook.com/novatec
LinkedIn: linkedin.com/in/novatec
Sumário
Agradecimentos
Prefácio
Sobre o autor
Capítulo 1 ■ Introdução
1.1 Linguagem de programação Lua
1.2 Obtenção do interpretador Lua
1.3 Interatividade
Introdução
Mac OS X Intel
Linux
1.3 Interatividade
A linguagem de programação Lua possui um ambiente de trabalho que
pode ser usado interativamente. Nesse modo, é possível realizar algumas
tarefas operacionais. Na linha de comando prompt (modo terminal) do
sistema operacional em uso, faça a chamada do programa lua53, acione
<Enter>. Será apresentada a mensagem de identi cação:
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
>
O símbolo “>” caracteriza o prompt do ambiente interativo da linguagem
Lua. Para sair do prompt do ambiente Lua e retornar ao terminal do
sistema operacional, basta executar o comando os.exit() e, em seguida,
acionar a tecla <Enter> ou <Return> ou ainda usar as teclas de atalho <Ctrl>
+ <c> ou as teclas de atalho <Ctrl> + <z> + <Enter>, dependendo do sistema
operacional em uso.
Dentro do ambiente interativo, é possível informar comandos com o
sentido de obter respostas imediatas. Por exemplo, desejando-se obter o
resultado da soma do valor 7.5 com o valor 4.8, basta executar a linha de
comando:
print(7.5 + 4.8)
Após acionar a tecla <Enter> ou a tecla <Return>, o resultado obtido será
12.3.
Veja a seguir uma série de operações com cálculos matemáticos que
podem ser efetivadas junto ao ambiente interativo.
print(-2 + -3)
print(2 * 3)
print(10 / 4)
print(10 % 4)
print(2 ^ 3)
print(2 + 5 * 3)
print(2 + (5 * 3))
print((2 + 5) * 3)
Os exemplos apresentados anteriormente resultam respectivamente nos
valores: -5, 6, 2.5, 2, 8, 17 e 21.
O ambiente interativo retorna mensagens de erro quando algo não é
escrito dentro das regras sintáticas do ambiente. Por exemplo, execute o
código:
print(2 + + 3)
Ocorrerá a apresentação da mensagem de erro: stdin:1: unexpected symbol
near '+'.
Para obter resultados de cálculos matemáticos, pode-se substituir o
comando print() pelo símbolo “=”, igual a, ou mesmo o omitir a partir da
versão 5.3 da linguagem. Dessa forma, podem ser de nidos os seguintes
cálculos.
=2*3 =2/3 =2+3 =2-3
2*3 2/3 2+3 2-3
Serão apresentados os resultados 6, 0.66666666666667, 5 e -1 para a
execução de ambas as linhas.
Os cálculos efetivados poderão trabalhar com outros formatos numéricos,
como valores expressos em notação cientí ca. Por exemplo, caso deseje
obter o resultado decimal do valor 9.5e2, sendo:
9.5e2
O resultado apresentará o valor 950, pois se calcula o valor 9.5
multiplicando-se por 10 e elevando-se a potência 2, ou seja, 9.5 x 102.
Experimente =9.5e-2 para obtenção do resultado 0.095.
Outra possibilidade é o uso de valores hexadecimais convertidos em
valores decimais. Por exemplo, observe os seguintes comandos.
0xa 0xA 0Xa 0XA
Ao serem executados, todos resultarão na apresentação do valor 10, pois o
valor A hexadecimal é igual ao valor 10 em decimal. Não importa como é
de nido o valor, seja em formato de caractere maiúsculo ou formato de
caractere minúsculo, o resultado será sempre apresentado.
O ambiente interativo da linguagem Lua aceita o uso de variáveis. Por
exemplo, informe as linhas de código seguintes acionando a tecla <Enter>
ou <Return> para cada linha informada.
A = 2
B = 3
print(A + B)
Observe o surgimento do valor 5 como resultado da operação. Um
cuidado que se deve tomar na de nição de variáveis é com relação ao
nome atribuído. Por exemplo, as seguintes variáveis não são as mesmas,
pois a linguagem Lua é do tipo case sensitive e diferencia caracteres
maiúsculos de minúsculos.
COR = 1
COr = 2
Cor = 3
cor = 4
cOR = 5
cOr = 6
CoR = 7
coR = 8
print(COR)
print(COr)
print(Cor)
print(cor)
print(cOR)
print(cOr)
print(CoR)
print(coR)
Outro detalhe no uso e na de nição de variáveis é a possibilidade de se
efetivar a criação de múltiplas variáveis. Por exemplo, observe o código
seguinte:
CODIGO, NOME = 1965, "Manzano"
print(CODIGO)
print(NOME)
Note que serão apresentados os valores 1965 e Manzano. O símbolo “=”
separa os conteúdos 123 e Paulo das variáveis CODIGO e NOME, fazendo a
atribuição dos valores respectivamente às variáveis indicadas.
CAPÍTULO 2
Programação sequencial
^ Exponenciação Number
* Multiplicação Number
+ Adição Number
- Subtração Number
.. Concatenação String
Considere a fórmula AREA = . RAIO2 para o cálculo da área de uma
circunferência, em que estão presentes as variáveis AREA e RAIO, a constante
(pi = 3.14159) e os operadores aritméticos de multiplicação e também a
operação de potência, elevando o valor da variável RAIO ao quadrado.
As expressões aritméticas escritas para a execução em um computador
seguem um formato um pouco diferente do conhecido na ciência
matemática. Por exemplo, a expressão: X = { 43 . [ 55 : (30 + 2) ] } será
normalmente escrita como X = ( 43 * ( 55 / ( 30 + 2) ) ). Note que as
chaves e colchetes são abolidos, utilizando em seu lugar apenas
parênteses.
Se a fórmula a ser usada fosse para calcular a área de um triângulo, em
que é necessário efetuar a multiplicação da base pela altura e em seguida
dividir esse valor pela constante 2, como caria?
Observe a Figura 2.1 com a indicação da fórmula para o cálculo da área de
um triângulo:
X := A; X = A; X = A
A := B; A = B; A = B A, B = B, A
B := X; B = X; B = X
Uma característica da linguagem Lua é o efeito de coerção que ocorre
quando certa operação de atribuição é realizada. Lua é uma linguagem
que de ne automaticamente para uma variável em uso o tipo de dado a
ela associado. Não é preciso de nir previamente o tipo da variável a ser
utilizada.
O efeito de coerção (conversão automática) tenta aplicar sobre uma
operação aritmética a de nição de dados do tipo numérico, mesmo
quando está em uso um dado do tipo string, que seja, é claro, a
representação de uma sequência numérica. Por exemplo:
A = 20
B = "30"
C = A + B
Observe que no caso anterior a variável C possuiria o valor numérico
inteiro 50, sendo este a soma do valor numérico inteiro 20 da variável A
com o valor caractere alfanumérico 30 da variável B, o qual é convertido
automaticamente para o seu valor numérico inteiro equivalente 30.
No caso anterior, ocorreu a soma na variável C do conteúdo da variável B
com o conteúdo da variável A. Lua entendeu o desejo de se fazer a soma
do valor numérico inteiro 20 com o valor alfanumérico 30 e processou essa
soma realizando uma operação de coerção sobre o valor 30 de nido como
string. Quando não for possível estabelecer uma operação de coerção, Lua
reportará um erro de execução.
Outra possibilidade de uso de coerção é quando se deseja concatenar um
valor numérico a um valor string de nido. Por exemplo:
A = 20
B = "Resultado = "
C = B .. A
Observe que a variável C possuiria o valor concatenado Resultado = 20, em
que o conteúdo 20 da variável A será tratado como se fosse o string 20
concatenando-o por meio do operador aritmético .. com o conteúdo
"Resultado = " da variável B.
Em momento mais oportuno à frente o tema relacionado à conversão de
tipos de dados será retomado.
== Igual a
Símbolo Signi cado
~= Diferente de
O operador and faz com que o resultado lógico seja verdadeiro (nil)
quando todas as condições envolvidas na decisão também o forem,
gerando assim um resultado lógico verdadeiro.
A m de exempli car esse tipo de ação, o programa cap0303.lua efetua a
leitura de um valor numérico entre 1 e 9 e apresenta mensagem
informando se o valor está na faixa de 1 a 9 ou se está fora dessa faixa de
valores.
-- programa cap0303.lua
io.write("Entre numero: ") N = tonumber(io.read())
if (N >= 1) and (N <= 9) then
print("Valor na faixa de 1 a 9")
else
print("Valor fora da faixa")
end
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
O exemplo anterior apresenta a utilização do operador de conjunção and,
que somente permitirá a apresentação da mensagem: Valor na faixa de 1
a 9, caso o valor fornecido para a variável N esteja entre 1 e 9. Qualquer
valor fornecido fora da faixa de nida apresentará a mensagem: “Valor
fora da faixa".
O operador lógico de disjunção (inclusiva) é usado quando pelo menos
um dos relacionamentos lógicos de uma decisão precisa ser verdadeiro
(nil) para obter-se um resultado lógico verdadeiro (nil); caso contrário, o
valor do resultado lógico retornado será false. Observe a Tabela 3.3.
Tabela 3.3 – Operador lógico “or”
Condição 1 Condição 2 Resultado
3.6 Divisibilidade
Divisibilidade é a qualidade do que é divisível. Nesse contexto, dois
conceitos devem ser conhecidos e entendidos pelos programadores de
computador: múltiplos e divisores de números naturais. Entende-se por
número natural um valor numérico que seja inteiro e positivo.
Múltiplos são os resultados obtidos da multiplicação de dois números
naturais, enquanto divisores são números naturais que dividem outros
números naturais para gerar um resultado exato de divisão, ou seja, obter
resto de divisão sempre zero. Quando o resto de uma divisão de números
naturais é igual a zero, tem-se divisibilidade, ou seja, resultado de divisão
exata.
Pelo fato de todo número natural ser múltiplo de si mesmo, um modo de
trabalhar esses valores é por meio das operações de cálculo com divisores.
Em uma divisão, existem alguns termos que devem ser conhecidos:
dividendo (valor que será dividido), divisor (valor que divide o
dividendo), quociente (resultado da divisão do dividendo pelo divisor) e
resto (valor que sobra da divisão).
Do ponto de vista computacional, de acordo com a sintaxe da linguagem
Lua, a obtenção do resultado de divisibilidade de um valor é
operacionalizada a partir do operador aritmético de resto de divisão “%”
ou a partir da operação math.mod().
A título de demonstração do processo de divisibilidade, considere o
programa que efetua a leitura de um valor numérico e apresenta esse
valor caso seja divisível por 4 e 5. Não sendo divisível por 4 e 5, o
programa deve apresentar a mensagem “Valor não é divisível por 4 e 5".
Para resolver esse problema, é necessário, além do operador lógico and,
veri car se a condição do valor lido é ou não divisível por 4 e 5.
O programa proposto é de nido com base em duas soluções, sendo: a
primeira versão a partir do cálculo direto do resto de divisão com a
expressão resto = dividendo - divisor * (divisor // dividendo) e a
segunda versão a partir do cálculo do resto de divisão com o operador
aritmético de resto de divisão resto = dividendo % divisor. Fica a critério
do programador escolher a desejada.
O programa cap0310.lua demonstra a veri cação da ação de divisibilidade
com o uso do cálculo genérico de obtenção de resto de divisão.
-- programa cap0310.lua
io.write("Entre valor numerico: ")
N = tonumber(io.read())
R4 = N - 4 * (N // 4)
R5 = N - 5 * (N // 5)
if (R4 == 0) and (R5 == 0) then
print(N)
else
print("Valor nao e divisivel por 4 e 5.")
end
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Observe, nesse primeiro exemplo, as expressões aritméticas de cunho
genérico R4 = N - 4 * (N // 4) e R5 = N - 5 * (N // 5), para obtenção do
valor da divisibilidade e do resto da divisão do valor da variável N pelos
valores dos divisores 4 e 5, respectivamente. A instrução de tomada de
decisão usa a condição (R4 == 0) and (R5 == 0), que será verdadeira se
ambas as condições forem verdadeiras.
O programa cap0311.lua demonstra a veri cação da ação de divisibilidade
com o uso do operador de resto “%”.
-- programa cap0311.lua
io.write("Entre valor numerico: ")
N = tonumber(io.read())
R4 = N % 4
R5 = N % 5
if (R4 == 0) and (R5 == 0) then
print(N)
else
print("Valor nao e divisivel por 4 e 5.")
end
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Observe, nesse segundo exemplo, o uso do operador de módulo de
divisão R4 = N % 4 e R5 = N % 5, para obtenção do valor da divisibilidade e
do resto da divisão do valor da variável N pelos valores dos divisores 4 e 5,
respectivamente.
Estruturas de dados
Recursos complementares
Arquivos em disco
a Modo adição – abre um arquivo existente ou cria um novo arquivo para adicionar
w+ Modo escrita – cria novo arquivo apagando os dados existentes e coloca o novo
arquivo em modo de leitura e escrita
a+ Modo adição e leitura habilitados para quando um arquivo existe ou quando cria
um novo arquivo
8.2.1 Texto
Um arquivo texto consiste numa sequência de caracteres armazenados em
um “pacote” de dados gravado em uma mídia num formato conhecido
como ASCII. O conteúdo desse arquivo pode ser formado tanto por
sequências contíguas de caracteres, como por linhas identi cadas com o
uso de um caractere especial de controle chamado caractere de m de
linha. O arquivo texto também possui no seu nal gravado outro
caractere especial chamado caractere de m de arquivo.
O formato ASCII usado em um arquivo texto representa a gravação de um
dado com seu valor numérico referente à tabela ASCII, o qual representa
um dos 256 símbolos que um computador pode utilizar. Na prática
interna computacional, um arquivo texto é formado por uma sequência
numérica que é traduzida na forma textual quando se faz a leitura do
arquivo.
A escrita de dados num arquivo texto é efetuada no nal do arquivo e sua
leitura é executada sequencialmente a partir do início do arquivo. Esse
formato não é bom para o armazenamento de dados que necessitam de
atualizações constantes, como um arquivo para o cadastro de clientes de
uma empresa. Nesse caso, a melhor alternativa é o uso de arquivo binário
apresentado adiante.
Para ser usado pelo computador, um arquivo texto dá ao sistema
operacional um grau de trabalho maior do que um arquivo binário, pois
todos os dados fornecidos para gravação precisam ser traduzidos para o
formato ASCII a m de serem gravados no arquivo. No momento da
leitura, esses dados precisam ser convertidos para sua forma binária com
o intuito de que o sistema operacional possa direcioná-los para o uso
devido. Por exemplo, imagine gravar em um arquivo texto os caracteres
maiúsculos ABC, que serão armazenados com seus valores ASCII, sendo
065, 066 e 067 contiguamente, ou seja, 065066067. No momento da
leitura, o sistema operacional terá de pegar cada grupo de valores ASCII,
sendo 065, 066 e 067, e transformar cada grupo em seu respectivo valor
binário para este ser usado. Além disso, se é para ver esses valores no
monitor de vídeo, os valores serão lidos do arquivo, convertidos em
binário, levados ao bu er do monitor de vídeo e convertidos novamente
em formato ASCII para serem apresentados ao usuário do sistema, que,
normalmente, não conhece nada sobre esses detalhes.
Os exemplos deste tópico demonstram o uso básico de acesso e
manipulação de arquivos do tipo texto para a manipulação de caracteres
alfanuméricos com palavras ou frases. Para facilitar a identi cação desses
arquivos, será usada a extensão “TEX”, indicando arquivo do tipo texto.
Vale salientar que para a linguagem Lua o uso de extensão no nome do
arquivo é uma mera informação ilustrativa, podendo-se usar qualquer
nome para identi cação para uma extensão de arquivo.
O programa seguinte cria um arquivo do tipo texto de nome ARQTXT.TEX
com a utilização da função io.open(). Grave o programa com o nome
cap0801.lua.
-- programa cap0801.lua
ARQTXT = io.open("arqtxt.tex","w")
ARQTXT:close()
print("Arquivo ARQTXT.TEX criado.")
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Ao ser executado o programa, o arquivo ARQTXT.TEX é criado e colocado
em modo de abertura. Na primeira linha do programa, ocorre a de nição
do arquivo no modo W para a variável ARQTXT por meio da função
io.open(). O uso do modo W efetua a criação do arquivo, mesmo que ele já
exista. Quando um arquivo é recriado em cima de si mesmo, os dados
anteriores são apagados. Além do modo W é possível usar o modo A que
cria um arquivo quando este não existe e sempre o abre para acrescentar
novos dados.
Na sequência, a instrução ARQTXT:close() fecha o arquivo criado.
Para veri car a criação do arquivo, solicite a apresentação do conteúdo do
local do disco onde o arquivo foi criado; nesse caso, o arquivo criado
estará com zero byte.
Após a criação do arquivo, ele pode ser utilizado para gravar dados com o
modo A. O programa seguinte efetua a leitura de palavras ou frase
efetuando a gravação do dado ao nal do arquivo ARQTXT.TEX. Grave o
programa com o nome cap0802.lua.
-- programa cap0802.lua
ARQTXT = io.open("arqtxt.tex","a")
io.write("Informe palavra ou frase: ")
PALAVRA = io.read()
ARQTXT:write(PALAVRA.."\n")
ARQTXT:close()
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Depois de executar o programa e informar uma palavra ou frase, solicite
novamente a exibição do conteúdo do diretório de seu disco para ver o
arquivo ARQTXT.TEX com um número de bytes diferente de zero.
O programa cap0802.lua estabelece a abertura do arquivo em modo
acréscimo com a instrução ARQTXT = io.open("arqtxt.tex","a") que abre o
arquivo ARQTXT.TEX para a inclusão de uma nova palavra ou frase,
posicionando o ponteiro de controle de registros sempre no nal do
arquivo devido ao uso do código \n junto à instrução
ARQTXT:write(PALAVRA.."\n"). Caso o arquivo tenha alguma palavra ou
frase gravada, a próxima inserção será colocada após a última cadastrada,
efetuando o efeito de acréscimo de dados.
A seguir, o programa cap0803.lua efetua a leitura do arquivo texto
ARQTXT.TEX, apresentando no vídeo as palavras ou frases gravadas pelo
programa anterior.
-- programa cap0803.lua
ARQTXT = io.open("arqtxt.tex","r")
for PALAVRA in ARQTXT:lines() do
io.write(PALAVRA.."\n")
end
ARQTXT:close()
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Para a extração do conteúdo de um arquivo, utiliza-se o modo de
operação R e se faz uso do laço for com a de nição de ação iteradora
(comando in) que percorrerá o arquivo com a função lines() e exibirá
cada uma das linhas lidas com a função io.write().
O programa cap0804.lua cria um arquivo em formato texto contendo
valores numéricos pares situados na faixa de valores entre 01 até 10.
-- programa cap0804.lua
ARQTXT = io.open("pares.tex","w")
FMT = string.format
for I = 1, 10 do
R = I % 2
if (R == 0) then
ARQTXT:write(FMT("%02d\n", I))
end
end
ARQTXT:close()
print("Arquivo com pares de 01 ate 10 criado.")
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
A linha de instrução R = I % 2 obtém o valor do resto da divisão do valor
da variável I por 2. Esse valor poderá ser 1 (se for ímpar) ou 0 (se for par).
A instrução if (R == 0) then veri ca se o valor do resto da divisão é zero,
sendo executada a instrução ARQTXT:write(FMT("%02d\n", I)) que escreve
no arquivo o valor par obtido. O indicativo "\n" junto ao código de
formatação está sendo usado para armazenar no arquivo um valor
numérico por linha. Sem esse recurso, os valores numéricos seriam
armazenados um ao lado do outro.
O programa cap0805.lua efetua não apenas a leitura do arquivo pares.tex,
mas também o somatório dos valores, além de mostrar seu resultado.
-- programa cap0805.lua
ARQTXT = io.open("pares.tex","r")
SOMA = 0
for VALOR in ARQTXT:lines() do
SOMA = SOMA + tonumber(VALOR)
end
ARQTXT:close()
print("Soma dos pares: " .. SOMA)
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
O programa cap0805.lua faz uso da função tonumber(), que pega cada valor
numérico armazenado no arquivo na forma de string e o converte para
sua forma numeral. Apesar de a linguagem Lua realizar esse tipo de
conversão automaticamente, é recomendado que se de na esse tipo de
operação de modo explícito.
O programa cap0806.lua visa fazer a entrada de dados pessoais contendo
nome e telefone por meio do armazenamento de forma simples dos dados
em um arquivo texto chamado agenda.tex. O programa cria o arquivo (se
este não existir) colocando-o em modo de adição.
-- programa cap0806.lua
ARQTXT = io.open("agenda.tex","a")
RESP = "S"
while (RESP == "S") do
io.write("Nome .......: ")
NOME = string.upper(io.read())
io.write("Telefone ...: ")
TELE = io.read();
REGISTRO = NOME .. " " .. TELE
ARQTXT:write(REGISTRO.."\n")
io.write("[+]registro? S/N ")
RESP = string.upper(io.read())
end
ARQTXT:close()
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
O programa usa a função io.open() com o modo de operação A para
permitir a inserção de novos registros ao arquivo. Atente também para o
uso da função string.upper() que transforma em maiúsculo as entradas
efetuadas junto às variáveis NOME e RESP.
O programa cap0807.lua efetua a leitura dos dados do arquivo agenda.tex.
-- fim cap0807.lua
ARQTXT = io.open("agenda.tex","r")
for REGISTRO in ARQTXT:lines() do
io.write(REGISTRO.."\n")
end
ARQTXT:close()
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
É possível com a linguagem Lua criar um programa que efetue a criação
automática de páginas HTML/XHTML.
O programa cap0808.lua seguinte cria uma página em código XHTML.
-- programa cap0808.lua
ARQTXT = io.open("teste.html","w")
ARQTXT:write("<html><head><title>")
ARQTXT:write("Livro de Linguagem Lua")
ARQTXT:write("</title></head>")
ARQTXT:write("<body>")
ARQTXT:write("Linguagem Lua: Estudo Introdutorio")
ARQTXT:write("</body></html>")
ARQTXT:close()
print("A pagina teste.html foi criada.")
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Observe junto ao programa as de nições das tags XHTML para criação
da página com o nome teste.html, a qual poderá ser executada por um
programa de navegação.
O programa cap0809.lua demonstra a abertura do arquivo agenda.tex para
leitura realizada pela função read() com parâmetro *all que fará a leitura
de todo o conteúdo atribuindo a leitura à variável DADOS. Após a leitura, é
criado o arquivo de escrita chamado agclon.tex com os dados clonados do
arquivo agenda.tex.
-- programa cap0809.lua
ARQORG = io.open("agenda.tex","r")
DADOS = ARQORG:read("*all")
ARQORG:close()
ARQCLO = io.open("agclon.tex", "w")
ARQCLO:write(DADOS)
ARQCLO:close()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Ao ser executado o programa cap0809.lua, ocorre a criação da clonagem
do arquivo agclon.tex. Observe que nesse programa se utiliza a função
read() com parâmetro *all que pode ser substituído pelo parâmetro *a e a
função write() que efetua a gravação de todos os dados associados à
variável DADOS.
8.2.2 Binário
Um arquivo binário consiste numa sequência de caracteres, que são
armazenados em um “pacote” de dados gravados em uma mídia num
formato numérico, formado por sequências binárias de valores
denominados byte na forma pura de sua representação. O arquivo binário
possui gravado no seu nal um caractere especial chamado caractere de
m de arquivo.
O programa cap0810.lua cria um arquivo em formato binário contendo
valores numéricos pares situados na faixa de valores entre 01 até 10.
-- programa cap0810.lua
ARQBIN = io.open("pares.bin","wb")
FMT = string.format
for I = 1, 10 do
R = I % 2
if (R == 0) then
ARQBIN:write(FMT("%02d\n", I))
end
end
ARQBIN:close()
print("Arquivo com pares de 1 ate 10 criado.")
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
O programa cap0810.lua é similar ao programa cap0804.lua, apresentando
como diferencial o fato de operar o arquivo em formato binário. O
programa cap0811.lua realiza a leitura e a apresentação do arquivo
pares.bin.
-- programa cap0811.lua
ARQBIN = io.open("pares.bin","rb")
for REGISTRO in ARQBIN:lines() do
io.write(REGISTRO.."\n")
end
ARQBIN:close()
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Os programas de gerenciamento de arquivos binários possui a mesma
forma de sintaxe dos arquivos textos. A diferença está na de nição dos
modos de operação para criação do arquivo como “WB”, podendo-se usar
os modos “AB” e “RB” dependendo da ação que se deseja realizar.
A seguir, são apresentados dois exemplos de programas com uso de
arquivos binários com dados do tipo numérico por meio de matriz A de
uma dimensão com oito elementos.
O programa a seguir solicita a entrada de dez valores numéricos
armazenando esses valores em uma matriz a m de transferi-los de uma
só vez para o arquivo ARQBIN.BIN. Grave o programa com o nome
cap0812.lua.
-- programa cap0812.lua
ARQBIN = io.open("arqbin.bin","wb")
FMT = string.format
A = {}
for I = 1, 8 do
io.write("Informe o ")
io.write(FMT("%2d", I), "o. valor: ")
A[I] = tonumber(io.read())
end
for I = 1, 8 do
ARQBIN:write(A[I] .. "\n")
end
ARQBIN:close()
print("Arquivo gravado.")
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Ao ser executado o programa, informe os valores e, em seguida, veri que
a de nição do arquivo.
O programa cap0813.lua efetua a leitura dos dados armazenados no
arquivo arqbin.bin transferindo a leitura de cada valor para uma posição
da matriz A.
-- programa cap0813.lua
ARQBIN = io.open("arqbin.bin","rb")
A = {}
I = 1
for REGISTRO in ARQBIN:lines() do
A[I] = REGISTRO
print(A[I])
I = I + 1
end
ARQBIN:close()
print()
io.write("Tecle <Enter> para encerrar...")
io.read '*l'
Ao ser executado o programa, os dados armazenados do arquivo são
apresentados. Note que, pelo fato de se estar em uso uma ação iteradora
com o comando for... in... do, torna-se necessária a de nição da
variável REGISTRO inicializada e incrementada para controlar os índices de
acesso da matriz A.
EMMERICH, P. Beginning Lua with World of Warcraft Addons. USA: Apress, 2009.
GUTSCHMIDT, T. Game Programming with Python, Lua, and Ruby. USA: Premier
Press, 2003.
IERUSALIMSCHY, R.; FIGUEIREDO, L. H. de; CELES W. Lua 5.2 Reference
Manual. Rio de Janeiro: Lua.org, 2011.
_____________. Programming in Lua. 2. ed. Rio de Janeiro: Lua.org, 2006.
INFO EXAME. O mundo se rende à brasileira Lua. Desenvolvimento, 2009.
Disponível em: <http://info.abril.com.br/professional/desenvolvimento/o-mundo-se-
rende-a-brasileira-lua.shtml>.
JUNG, K.; BROWN, A. Beginning Lua Programming (Programmer to Programmer).
USA: Wrox; 2007.
UNIVERSIA. Lua conquista Microsoft. Notícia, 2002. Disponível em:
<http://noticias.universia.com.br/destaque/noticia/2002/08/30/540541/lua-conquista-
microsoft.html>.
Introdução à linguagem Python
Manzano, José Augusto N. G.
9788575227152
352 páginas