Lua: Aprenda A Controlar Entrada E Saída De Dados

Hoje vamos falar sobre manipulação de entrada e saída em nossos scripts na linguagem lua.

Importação do Módulo

Para isso vamos usar um módulo IO da biblioteca padrão de lua. Com esse modulo nós conseguimos manipular entradas de dados pelo terminal e manipular arquivos. Bom para gente utilizar esse módulo primeiramente o que precisamos fazer é importar ele através da função require, que já falamos em outro video.

local io = require("io")

Com o modulo importado temos a nossa tabela IO, que possui todas as funções que vamos utilizar nesse post. Também já falamos das tabelas em outro video, vai lá conferir.

Dito isto, para gente começar a capturar um input do usuário no nosso script, temos que usar a função read do módulo.

Lendo o input do Usuário

Então primeiro vamos escrever o código para receber um valor informado pelo usuário:

local io = require("io")

local valor1 = io.read()

Como vimos ao executar nosso programa, ele já está esperando a interação do usuário para continua a execução, mas se dermos o input o código não faz mais nada, só para de executar.

Isso acontece por que estamos capturando o valor na variável valor1, mas não fazemos mais nada com esse valor, não imprimimos nenhuma informação no terminal para sabermos o que ta acontecendo.

Escrevendo na saída padrão

Então como estamos falando do módulo de entrada e saída. Vamos falar da função de saída padrão que, no caso é a io.write. Para exemplificar o uso dessa função, vamos colocar uma mensagem assim que nosso programa é executado:

local io = require("io")
io.write("Digite um valor numerico")
local valor1 = io.read()

O resultado dessa função (write) é o mesmo que usar a função print:

local io = require("io")
io.write("Digite um valor numerico")
print("Digite um valor numerico")
local valor1 = io.read()

como a gente pode ver o resultado é o mesmo quando executamos o código.

Bom, agora como a gente pode trabalhar com arquivos?

Primeiramente nós conseguimos abrir arquivos no modo texto com a função input ou open. As duas funções te retornam um objeto representando o seu arquivo dando a possibilidade de manipulá-lo.

A função open é mais completa por que podemos abrir esse arquivo em alguns modos diferentes. Por exemplo, vou criar um arquivo txt, e vou usar a função input.

A mesma abre o arquivo que é passado como parâmetro na entrada padrão do programa, ou seja, conseguimos sequenciar valores no nosso arquivo e usar a função read para ler cada linha.

Usando a função read, da mesma forma que usamos para receber o input do usuário, por exemplo:

local io = require("io")
arquivo = io.input("teste.txt")

--agr se chamarmos a função io.read() recebemos os valores direto do arquivo
print(io.read())
print(io.read())
--aqui podemos ver as duas linhas do nosso arquivo

A função input retorna uma referência pro arquivo também, então através da variável arquivo conseguimos manipular esse aquivo também. Mas agora eu vou apresentar uma função melhor para esse tipo de manipulação e mais útil também.

Na função open, nos precisamos passar dois argumentos, primeiro o nome do arquivo que vamos manipular, assim como a função input, e depois o modo que vamos abrir esse arquivo, se é no modo de leitura, escrita, adição, etc.

Vamos ver como usa essa função:

local io = require("io)
--primeiro vamos abrir o arquivo em modo de leitura, eu chamo a dunção e passo o mode 'r'
arquivo = io.open("teste.txt", 'r')
--essa função retorna um objeto do tipo file e podemos manipular agr
print(arquivo:read())
print(arquivo:read())
--aqui podemos ver as duas linhas do nosso arquivo

A partir desse ponteiro conseguimos escrever no arquivo também, mas para isso precisamos usar o modo ‘w’, e usar algumas funções para salvar os dados.

local io = require("io)
arquivo = io.open("teste.txt", 'w')
-- com o ponteiro aberto podemos usar a função write que ja vimos antes pra escrever nesse arquivo
arquivo:write('teste de adição de linha')
//agr precisamos salvar o buffer de alteração e escrever de fato no arquivo
arquivo:flush()
-- com a função flush salvamos todas as alterações 
-- após salvar as informações é importante você fechar o arquivo caso 
-- não vá mais manipula-lo para não desperdiçar recursos
-- os arquivos são fechados automaticamente pelo garbage collector de lua
-- mas isso leva uma quantidade indeterminada de tempo então é melhor fechar 
-- todos os arquivos que vocẽ abrir
-- fazemos isso com a função close()
arquivo:close()

Leia também: O que é Open Source e Software livre?

Exercitando tudo isso!

Bom esse é o básico de como a manipulação de arquivos funciona na linguagem lua, então para fixar bem os conceitos, vamos fazer um pequeno programinha que recebe dados pelo input da entrada padrão do programa e escreve isso em um arquivo, depois apresenta esses dados para gente após a gravação.

Então vamos criar um novo arquivo, e basicamente vamos usar quase tudo que vimos nessa aula. Para começar devemos importar o modulo io de novo. Nosso programa vai ser um formulário onde os dados serão salvos em um arquivo.

local io = require('io')
-- antes de mais nada vamos colocar uma mensagem de boas vindas 
print("Olá, bem vindo ao nosso sisteminha lua")
-- vamos pedir pro usuario digitar o nome
print("Digite o seu nome")
-- vamos salvar esse valor em uma variavel
nome = io.read()
-- Agora vamos pedir a idade
print("Digite a sua idade")
idade = io.read()
-- E por ultimo vamos pedir pro usuario digitar a altura
print("Digite a sua altura")
altura = io.read()
-- agora vamos escrever esses dados em um arquivo csv, que basicamente é um formato 
-- livre pra criação de tabelas separadas por virgula.
-- pra isso primeiramente precisamos criar um novo manipulador de arquivo e fazemos 
-- isso com a função open no modo de Write que é o modo 'w'
relatorio = io.open('usuario.csv', 'w')
-- agora no formato csv a primeira linha é usada para armazenar os
-- nomes das colunas da tabela que nesse caso é nome, idade, altura
relatorio.write('nome,altura,idade')
-- vamos separar esses valores por virgula
-- agora vamos escrever nossos dados de fato
-- precisamos passar os dados na mesma ordem que adicionamos as colunas
relatorio.write(nome..','..altura..','..idade)
-- aqui usamos o operador de concatenação pra juntar todos os valores em uma string só
-- e por ultimo temos que usar a função flush pra salvar todos os dados "fisicamente" no arquivo
relatorio:flush()
-- com isso nós salvamos os dados mas o arquivo continua aberto, 
-- então vamos fechar o arquivo e executar o programa
relatorio:close()

Bom esse foi o exemplo bem simples para colocar em prática o que vimos nesse post. Manipular aquivos é algo muito corriqueiro e pode ser usado de diversas formas, seja para gerar um csv como nós fizemos, ou para gerar um relatório em um sistema.

Espero que tenha ficado claro como isso é feito em lua e agora é só usar sua imaginação e implementar isso nos seus programas. Se você gostou desse post, se inscreva na nossa newsletter e nos siga nas redes sociais.

One thought on “Lua: Aprenda A Controlar Entrada E Saída De Dados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *