Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

viernes, 31 de agosto de 2012

Ficheros: Lectura y escritura de ficheros de texto

Para guardar y leer información de ficheros de texto en Gambas, se usa la orden File, en especial los métodos .load y .save

Para Leer datos de un fichero
File Load:
cadena_de_texto = File.Load(ruta)

Para guardar el contenido de una cadena en un nuevo fichero:
 File Save:
File.Save(ruta, cadena_de_texto)


Para más informacion:
http://gambaswiki.org/wiki/comp/gb/file/load?nh
http://gambaswiki.org/wiki/comp/gb/file/save?nh



Un ejemplo simple:

Public Sub Main()
Dim texto As String
Print "------------------"
Print "Ejemplo de uso de File"
Print "------------------"

texto = "Esto es un mensaje guardado"

Print "La informacion que guardo es: "
Print texto

File.Save(User.Home & "/prueba.txt", texto)

Print "texto guardado en "; User.home & "/prueba.txt"

Print "Ahora lo leo y muestro su contenido:"
texto = File.Load(User.home & "/prueba.txt")


Print "------------------"
Print "Contenido:"
Print texto
Print "------------------"


End



Enlace de descarga del código: enlace
Enlace de Descarga del ejecutable: enlace

Normalmente, la información que guardamos son array de cadenas. (o arrays de numeros que convertimos en cadenas). Nos va a ser muy útil el  metodo .join y la función split, como veremos en el siguiente ejemplo:


' Gambas module file


Public Sub Main()
Dim arr_cadena As String[]
Dim arr_copia As String[]
Dim a As Integer
Dim contenido As String
'añadimos al array de cadenas unos nombre...
arr_cadena = New String[]
arr_cadena.Add("Julio")
arr_cadena.Add("Juan")
arr_cadena.Add("Luis")
arr_cadena.Add("Marta")
arr_cadena.Add("Eva")


'los guardamos en una variable de cadena, para ello, los unimos con la funcion .join
contenido = arr_cadena.Join("|") 'usamos el caracter "|" , para separar los datos unos de otros


Print "Los datos los guardos en este formato:"
Print contenido


File.Save(User.home & "/lista.txt", contenido)
Print ""
Print ""
Print "Ahora leo los datos"
contenido = File.Load(User.home & "/lista.txt")


Print "Ahora, los divido usando la funcion split, para tenerlos otra vez en un array de cadenas"


arr_copia = New String[]
arr_copia = Split(contenido, "|")


'ya estan contenido en el array
'
'los muestros:
For a = 0 To arr_copia.Max
Print "array ("; a; ")="; arr_copia[a]
Next
Print "Fin del programa"


End


El resultado en la consola es:

Enlace de descarga del Código Fuente: Enlace
Enlace de descarga del ejecutable: Enlace


Nota:
user.home: nos indica el directorio del usuario

Otro ejemplo simple:
Vamos a generar una serie de valores integer aleatorios en un array , guardarlos en un archivo y luego leerlos y asignarlos a otro array y mostrarlo en la pantalla.


Public Sub Form_Open()

Dim a As Integer
Dim numeroaleatorio As Integer

'array donde estaran los numero integer
Dim arrayValores As New Integer[]
'array de conversion a cadena
Dim arrayCadena As New String[]
'cadena resultante: cadena que contiene todos los valores del array de integer,convertido en una unica cadena
Dim cadena As String
Dim cadenaLeida As String 'cadena para leer de un archivo

'creo los numeros que añado al array
Randomize

For a = 0 To 50
numeroaleatorio = Rnd(1, 6)
arrayValores.Add(Int(numeroaleatorio))
Next

For a = 0 To 10
arrayCadena.Add(Str$(arrayValores[a]))
Next

'uno todos los valores, separandoles con una barra vertical
cadena = arrayCadena.Join("|")

Print "La cadena de numero es: "; cadena

'y esta cadena es la que puedo guardar en el fichero de texto..
File.Save(User.home & "/MatrizPrueba.txt", cadena)

'borro los datos anteriores
arrayCadena.Clear
arrayValores.Clear

'para leerla...
cadenaLeida = File.Load(User.Home & "/MatrizPrueba.txt")

'paso los valores de la cadena a una array de cadena de caracteres
arrayCadena = Split(cadenaLeida, "|")

'Paso el contenido del array de cadena de caracteres a un array de integer
For a = 0 To arrayCadena.Max
arrayValores.Add(Val(arrayCadena[a]))
Next

'Escribo los valores del array de integer..
For a = 0 To arrayValores.Max
Print arrayValores[a]; " ";
Next

End


Enlace de descarga del código: enlace


Nota: 27/10/2014
Write Append
Algunas veces necesitamos añadir información al final de un archivo de texto. Existe un modo de abrir el archivo, que nos facilita esa labor, ahorrandonos leer todo el contenido del archivo.

Código de ejemplo:

DIM hFile as File
DIM path as String
path = "ruta/al/archivo.txt"
hFile = OPEN path FOR WRITE APPEND
PRINT #hFile, "Escribo mas texto al final\n"
PRINT #hFile, "Y mas y mas\n"
hFile.Close


Con el codigo anterior hemos leido el archivo "ruta/al/archivo.txt", y le hemos añadido al final los textos de "Escribo mas texto al final\n" y  "Y mas y mas\n"

fuente: http://www.gambas-es.org/viewtopic.php?f=1&t=633&start=0



No hay comentarios:

Publicar un comentario

A falta de donativos... un poco de publicidad