Delphi - Cargar/Guardar archivo de texo a array dinámico

 
Vista:

Cargar/Guardar archivo de texo a array dinámico

Publicado por Pascual (12 intervenciones) el 09/11/2006 22:39:20
Hola, soy nuevo en Delphi 6.0 y necesito vuestra ayuda. ¿Cómo hago para cargar/guardar cada línea de un archivo de texto en un array dinámico?.

No tengo ni idea de como se hace, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

He hecho esto pero me unos errores muy malos

Publicado por Pascual (12 intervenciones) el 09/11/2006 23:34:07
procedure TForm1.Button4Click(Sender: TObject);
var
Lista: cLista;
Objeto: cObjeto;
Archivo: textfile;
informacion: string;
begin
IF VentanaEmergente.Execute THEN
BEGIN
SYSTEM.Assign(Archivo,VentanaEmergente.FileName);
SYSTEM.Reset(Archivo);
SYSTEM.Read(Archivo,informacion);
Objeto.CREATE;
Objeto.Campo1 := informacion;
Lista.Insertar(Objeto);
END;
end;

Pero ejecuto mi aplicación, pulso el botón, selecciono el archivo, doy a aceptar y me salta este error:

Project Practica1.exe raised exception class EAccessViolation with message 'Access violation at address 00403AE3 in module 'Practica1.exe'. Read of address 8BD88B37'. Process stopped. Use Step or Run to continue.

¿Qué hago mal?. Me estoy desesperando ya. Muchas gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar/Guardar archivo de texo a array dinámico

Publicado por Ery (42 intervenciones) el 09/11/2006 23:58:48
Es mas facil hacer algo como

var
M : TMemo;
I : Integer;
S : String;
begin
M := TMemo.Create(nil);
M.Lines.LoadFromFile o algo asi ('archivo');

For I := 0 to M.Lines.Count - 1 do
begin
S := M.Lines.String[i];
end;
end;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar/Guardar archivo de texo a array dinámico

Publicado por Pascual (12 intervenciones) el 10/11/2006 09:31:33
Ery gracias por lo que me has dicho, eso ya lo sabía, lo que necesito saber es lo que te voy a poner a continuación.

Los errores que me daban era porque estaba usando Objeto.CREATE; pero no había definido ningún constructor CREATE en la clase cObjeto. Eso ya está solucionado.

Tengo:
- Un archivo de texto con datos. En este formato:
@dato1@dato2@dato3
@dato1@dato2@dato3
@dato1@dato2@dato3
@dato1@dato2@dato3
@dato1@dato2@dato3
@dato1@dato2@dato3
- Una clase cObjeto que tiene tres campos: campo1, campo2, campo3.
- Un array dinámico de tipo cObjeto.

Entonces lo que yo quiero es que cada vez que pulse el botón se me guarde la información de la línea actual del fichero de texto al objeto, luego inserto el objeto en la lista así: Lista.Insertar(Objeto); y todo esto lo repito hasta que el fichero llegue a la última línea.

He pensado en hacer esto pero no me funciona:

procedure TForm1.Button4Click(Sender: TObject);
var
Lista: cLista;
Objeto: cObjeto;
Archivo: textfile;
informacion: string;
begin
IF VentanaEmergente.Execute THEN
BEGIN
SYSTEM.Assign(Archivo,VentanaEmergente.FileName);
SYSTEM.Reset(Archivo);
SYSTEM.Read(Archivo,informacion);
Objeto.CREATE;
Lista.CREATE;
Objeto.Campo1 := informacion;
Lista.Insertar(Objeto);
END;
end;

No se como empezar, ¿me ayudais?. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar/Guardar archivo de texo a array dinámico

Publicado por Ery (42 intervenciones) el 10/11/2006 14:34:56
Lo unico que se ocurre es manejar la parte de propiedades o elementos de la clase dentro de un type y asi puedes tener el manejo exactamente igual que cualquier otro archivo binario. Ya que delphi 6 no se que tenga serializacion de objetos pero bueno, se que el TStreamFile permite guardar y recuperar componentes pero nunca he probado hacerlo con una clase propia lo que te digo seria algo como

Pasar de
Type
TuObjeto = Class(TObject)
Dato1 : String;
Dato2 : String;
end;

a

Type
TuElementosDelObjeto = Record
Dato1 : String;
Dato2 : String;
end;

TuObjeto = Class(TObject)
Registro : TuElementosDelObjeto
end;

Ahora si puedes crear una manejo de archivo estandar binario para guardar y recuperar la data

El lo unico que se me ocurre sin abrir el delphi :-)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cargar/Guardar archivo de texo a array dinámico

Publicado por Pascual (12 intervenciones) el 11/11/2006 15:43:40
Bueno al final lo he hecho de otra forma:

He hecho una clase cLista (basada en la implementación del array dinámico) con este método declarado en la parte pública:

procedure cLista.Cargar_en_lista (VAR archivo: TextFile; VAR Lista: cLista);
var
informacion: string;
Objeto: cObjeto;
begin
repeat
Lista.Objetos[i] := cObjeto.Create;
SYSTEM.Readln(Archivo,informacion);
Lista.Objetos[i] := informacion;
Lista.Insertar(Equipo);
until EOF(archivo);
end;

Y luego en el OnClick del botón del formulario:

procedure TForm1.Button4Click(Sender: TObject); {Procesar fichero}
var
Archivo: TextFile;
begin
IF VentanaEmergente.Execute THEN
BEGIN
SYSTEM.Assign(Archivo,VentanaEmergente.FileName);
SYSTEM.Reset(Archivo);
Lista := cLista.Create(1);
Lista.Cargar_en_lista(Archivo,Lista);
END;
end;

Ery gracias por tu aportación, espero que esto os sirva a los demás también, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar