Mostrando las entradas con la etiqueta estandares. Mostrar todas las entradas
Mostrando las entradas con la etiqueta estandares. Mostrar todas las entradas

miércoles, 25 de septiembre de 2013

Abrir y escribir en archivos con lua (IO Library)

Los dos tutoriales anteriores han sido sobre lua,y van a ser muchos mas,en estos momentos ya se aprendio sobre tipos de datos y condicionales con estructuras de seleccion y de repeticion,asi que ya se puede entender perfectamente como abrir un archivo de texto y leerlo,modificarlo o crear uno y escribir en el.

Primero que nada vamos a usar las librerias del moudlo io de lua,Input,Output,entrada y salida,normalmente podriamos hacer un require para llamarlo,pero no es necesario en lua a menos que queramos cambiar el nombre del modulo,pero bueno,para no confundirnos de que modulo estamos usando podemos poner en la cabecera del archivo los require:

require 'io'

O entre comentarios,por si hacemos un programa grande y no recordamos que modulos usamos.

Primero que nada Lua es muy similar a C,ya que la función que vamos a usar se parece a fopen,de C solo que un poco diferente,creamos un objeto desde el momento que abrimos un archivo,y en C creamos un puntero,bueno de todas formas vamos a ver como se hace:

Primero que nada definimos una variable con el nombre del archivo,en lua se recomienda que las variables las comencemos con local,ya que si no es así tendrían ámbito en todo el programa,esta es la forma de privatizar variables,funciones,etc:

local filename = "Arechivo.txt"

Ahora debemos crear un objeto que abra el archivo o lo cree en dado caso,con la funcion(io.open):

file = io.open(filename,modo)

En donde dice filename,es el nombre del archivo,desde una variable o crudo(una string),en modo es el modo de apertura:

w : Abre o crea un archivo en modo escritura(borra el contenido si existe)

r : Abre el archivo en modo lectura

a : Abre el archivo en modo adición(no borra el contenido si existe)

Hay mas.

Ahora debemos hacer lo que queramos:

Para leer un archivo linea por linea debemos iterar con un bucle for,hasta que termine de leer el archivo:

Para leer todo un archivo:

Primero que nada debemos saber que no necesariamente debemos crear un objeto,para trabajar con el,podemos abrilo simplemente pasandole el nombre del archivo:
for line in io.lines(filename) do  print (line) end

Vamos como enumerar las lineas de un archivo

n = 1

for line in io.lines(filename) do 
  io.write(n) 
  print (line)
  n = n + 1 
end

Para escribir en un archivo se pude desviar el STDOUT(salida estandar),ya que normalmente es en el prompt(terminal,consola),podemos desviarlo a un archivo,así:


io.output(io.open(filename,"w"))
Ahora si escribimos durante todo el programa,la orden de io,write,que es con el que escribe en la consola,ahora escribira en el archivo:

io.write("Hola este es un ejemplo\n")
io.write("Desde io.write\n")
Cuando terminemos cerramos el io:

io.close()

De esa manera se puden leer y escribir en archivos,pero no es la mejor manera,la mejor manera es usar un objeto:
file = io.open(filename,modo)
Y luego usar sus funciones de clase,para empezar lua usa notacion de dos puntos(:),para las clases,para recorrer un archivo linea por linea se usa esta sintaxis:

file = io.open(filename,"r")
for line in file:lines() do print(line) end
Para escribir en un archivo de texto se usa esta sintaxis:

file = io.open(filename,"w")

file:write("Texto\n")

Y en ambos casos se debe cerrar el archivo,cuando se termine de hacer lo que se tiene que hacer:

file:close()

Veamos un programa mas complejo:




 #!/usr/bin/env lua  
 repeat   
  io.write("Nombre del archivo: ")  
  filename = io.read()  
 until filename ~= ""  
 n = 1  
 file = io.open(filename,"w")  
 print ("Escribe EOF para salir...")  
 while true do  
  io.write("Linea "..n.." : ")  
  local response = io.read()  
  if response == "EOF" then break end  
  file:write(response.."\n")  
  n = n + 1  
 end  
 io.close()  

Eso es todo :D
Leer más...

domingo, 9 de diciembre de 2012

Tutorial flujos estándares de Unix

Esto suena un poco difícil o aburrido,por donde lo quieran ver,pero es algo muy útil y que usamos hasta en Ubuntu si hacemos copy & paste de un sitio,lo que pasa es que todos estos comandos de Unix los mantienen los sistemas tipo Unix GNU/Linux, BSD, o los Single Unix.

Así que vamos a darles un repaso a esto para que usemos mas la Terminal(Consola) de nuestro sistema tipo Unix o single Unix :D

Primero que nada vamos a ver los tres tipos de flugos que existen

stdin : Standard input (Entrada estándar)

stdout : Standard Out (Salida estándar)

stderr : Standard Error(Error estándar)

Explicación:

stdin

stdin es la entrada estándar de nuestro teclado en la mayoría de los casos,mas que nada para interactuar con nosotros y recoger información.

Si visitan este sitio a menudo se habran dado cuenta que coloco algunos scripts en Perl,este lenguaje usa stdin para recoger información desde el teclado:

<STDIN>
Así que en la shell de Unix o Bash/etc no seria mas que solamente escribir algo y estaríamos usando stdin.


stdout

Lo contrario a stdin es la salida de lo que pedimos con stdin,por ejemplo lo que sale de

cat archivo

Al escribir cat archivo estamos haciendo stdin, y al mostrarnos la salida es stdout.

stderr

Esto es los mensajes de error,que imprime la consola al hacer algo que no se puede o da error

por ejemplo escribir

sajdfsjf
Operadores

Como lo habíamos visto antes existen tuberías que redireccionan nuestros comandos, aquí vamos a adentrarnos un poco mas,ya que vamos a hablar mas a fondo de redireccionar stdin stderr y stdout.


Comando >

Redirige el stdout a un archivo,si este no existe lo crea y si existe lo borra y lo llena con el nuevo contenido.

Ejemplo:

echo "Hola" > archivo.txt 

Comando >>

Redirige stdout a un archivo,si este no existe lo crea y si existe añade la salida al final.

Ejemplo:

echo "hola" >> archivo.txt && echo "hola" >> archivo.txt


Comando 2>

Crea un archivo con stderr, si ya existe  lo borra y lo llena con el nuevo contenido.



Comando 2>>

Redirige stderr a un archivo,si este no existe lo crea y si existe añade la salida al final.



Comando &>

Crea un archivo que contiene el stderr y el stdin. Si el fichero existe,lo borra y lo llena con el nuevo contenido.

Ejemplo

cat ksksjd archivo.txt &> fichero.txt
Este nos manda los errores como la salida normal:


Otra forma de hacer esto es:

cat kdkkd archivo.txt > fichero.txt 2>&1




El comando <

Lo que hace este comando no es gran cosa,ya que como dige hace stdin el cual ya estamos haciendo al escribir

Osea que podemos hacer esto

cat < archivo.txt

Y es igual que esto

cat archivo.txt
O

ls < ~/

Es igual que

ls ~/
o

echo -e "Mi HOME\n" > mis_archivos.txt  && ls < ~/ >> mis_archivos.txt

Es igual que


echo -e "Mi HOME\n" > mis_archivos.txt  && ls ~/ >> mis_archivos.txt
Aunque hay algunas excepciones








Comando <<

Con este comando entramos al $PS2 y podemos meter todas las lineas que queramos ya que es stdin sin final de linea,osea que no borra el archivo que usemos.

Ejemplo:

cat << SALIR >> fichero2.txt
Esto es un poco mas complicado ya que al hacer esto es como si comenzaramos a escribir en un editor de texto,el cual mandara lo que escribamos a fichero2.txt y terminaremos de escribir al escribir SALIR:


Eso es todo :D

-->

Leer más...