Almacnar

SABB
27 de Enero del 2005
Hola,
necesito almacenar datos un vector con varios campos a un archivo .txt utilizando

mvallejos
27 de Enero del 2005
Explicate un poco mejor...
Que querés almacenar
Un vector, una matriz? que tipos de datos hay en tu estructura? ¿que son esos varios campos?

Saludos

sabb
27 de Enero del 2005
Es una estructura (Clima) de 20 posiciones
con varios campos (Temperatura, humedad...)

Y no consigo que se guarde en un txt lo he intentado con output y print.

Gracias

SABB
27 de Enero del 2005
La estructura es la siguiente:
-----------------------------
Public Type Clima ..
Dim Temperatura as integer
Dim Humedad as integer
End Public

Dim ClimaPueblo as Clima
---------------------------------------
Ahora tengo un txt con datos almacenados de temperatura, humedad, precipitaciones... y quiero poder añadir nuevos datos ya que no tengo posiciones vacias.
y no consigo que me deje guardarlas.

mvallejos
27 de Enero del 2005
Ahora se entiende mejor
Fijate como queda la estructura

Public Type Clima.
Temperatura as integer
Humedad as integer
End Type
' ClimaPueblo tiene que ser un vector dinámico, para
' que pueda variar sus dimensiones
Public ClimaPueblo() as Clima


Ahora, dado que tenemos una estructura, se puede trabajar tanto con archivos de texto como con accesos directos

Sub CargarArchivo(Archivo as string)
Dim Nro as Integer
Dim Dato as Clima
dim CantReg as long
Dim i as Long
Nro = Freefile
Open Archivo For Random As #nro Len =Len(clima)
' Calcular la cantidad de registros
CantReg = Filelen(Archivo)/Len(clima)
'Dimensionar el vector
Redim ClimaPueblo(CantReg-1)
i=-1
Do While not EOF(nro)
i=i+1
Get #Nro,,Dato
ClimaPueblo(i) = Dato
Loop
Close Nro
End Sub

Ahora veamos como sobreescrivir el archivo con el vector

Sub EscribirArchivo(Archivo as string)
Dim Nro as Integer
Dim Dato as Clima
Dim i as Long
Nro = Freefile
Open Archivo For Random As #nro Len =Len(clima)
For i = 0 to Ubound(ClimaPueblo)
Put #Nro,,ClimaPueblo(i)
Next i
Close Nro
End Sub

Donde Archivo es la ruta completa del archivo a trabajar.

Lo que queda es, que cada vez que desees agregar un dato a vector, primero llamas a Redim con la cláusula Preserve, para que no vacíe los datos ya ingresados o leidos

Dim IndiceNew as Long
IndiceNew=Ubound(ClimaPueblo)+1
Redim Preserve ClimaPueblo(IndiceNew)
ClimaPueblo(IndiceNew).Temperatura = <nuevo valor>
ClimaPueblo(IndiceNew).Humedad = <nuevo valor>


Espero que sirva

saludos