Delphi - alamacenar en un txt desde las edit con variable

 
Vista:

alamacenar en un txt desde las edit con variable

Publicado por Martin E. (7 intervenciones) el 10/12/2006 20:02:34
Hola, estube buscando en el foro y no encontre una respuesta sólida sobre lo siguiente. sé que es básico, pero estoy trabado.
Necesito saber como agregar en un archivo de texto información que cargo desde las eit. Por ejemplo, yo tengo 2 unit y tengo una variable tipo record llamado alumnos. Yo necesito generar una apliación, que tenga un menú con nuevo,abrir y agregar que al cargar información desde las edit, se almacene en un txt y que luego me va a permitir averiguar por ejemplo el mejor promedio.
Si alguien me puede ayudar, o decirme donde encontrar ejemplos de esto estaría agradecido....
Desde ya 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

RE:alamacenar en un txt desde las edit con variabl

Publicado por BigLuis (713 intervenciones) el 10/12/2006 21:09:37
Lo primero que debes saber es que esto no se debe almacenar en un fichero de texto sino en un fichero binario estructurado para poder recuperar los registros (record) uno a uno. Es mas complicado que como tu lo planteas pero indudablemente se puede hacer aunque tienes que familiarizate con los buffers, reset, rewrite, read, write, seek etc.
Si no encuentras nada dimelo y buscaré una aplicacion de prueba que hice hace varios años que te puede servir de guia. No te aseguro que la encuentre por que hace mas de 5 o 6 años pero en algun cd o disco duro la tendre (supongo).
Suerte
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:alamacenar en un txt desde las edit con variabl

Publicado por Martin E. (7 intervenciones) el 11/12/2006 05:29:31
Bueno, muchas gracias, voy a seguir buscando, solo que no necesariamente tengo que usar la variable tipo record, yo pensé que ese era el modo, pero solo necesito, que la aplicación pueda almacenar la información que cargue de las edit (nombre, dni, calificación) y mostrarlas en una memo, luego obvio tendre que hacer que calcules los promedios y esas cosas. Yo pensé que usando archivos de texto sería mas sencilla la programación. Hasta el momento logré que al abrir un archivo ya creado muestre los datos en la memo, pero no puede, que cree un archivo nuevo, y que vaya agregando info de las edit.

Si me podes dar una ayuda mejor, sino, muchas gracias por tu respuesta.
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:alamacenar en un txt desde las edit con variabl

Publicado por BigLuis (713 intervenciones) el 11/12/2006 13:12:07
Con un fichero de texto que almacena texto plano lo vas a tener muy dificil.La mejor solucion es un fichero estructurado que almacene los datos por bloques y cada bloque contiene un registro por lo que al recuperarle tienes acceso a los campos que contiene y por lo tanto a sus valores para calcular promedios etc.
Te mando el codigo por partes
unit UnitBinario;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Menus;

type
TFrmBinario = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label1: TLabel;
EditDireccion: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
EditPoblacion: TEdit;
Label5: TLabel;
Label6: TLabel;
EditCodPostal: TEdit;
BBSalir: TBitBtn;
EditTelefono: TEdit;
BBGrabar: TBitBtn;
BBCancelar: TBitBtn;
BtnAnadir: TButton;
BtnPrimero: TButton;
BtnAnterior: TButton;
BtnPosterior: TButton;
BtnUltimo: TButton;
EditNombre: TEdit;
MainMenu1: TMainMenu;
MnuFicheros: TMenuItem;
mnuAbrir: TMenuItem;
N1: TMenuItem;
MnuSalir: TMenuItem;
OpenD: TOpenDialog;
STContador: TStaticText;
Label7: TLabel;
BtnModificar: TButton;
Crear1: TMenuItem;
N2: TMenuItem;
Label8: TLabel;
EditDNI: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Listado: TSaveDialog;
procedure BtnAnadirClick(Sender: TObject);
procedure BBGrabarClick(Sender: TObject);
procedure BBCancelarClick(Sender: TObject);
procedure mnuAbrirClick(Sender: TObject);
procedure BtnPosteriorClick(Sender: TObject);
procedure MoverCursor(iRegActivo: Integer);
procedure BtnAnteriorClick(Sender: TObject);
procedure BtnPrimeroClick(Sender: TObject);
procedure BtnUltimoClick(Sender: TObject);
procedure MnuSalirClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtnModificarClick(Sender: TObject);
procedure Crear1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
Function BuscarDNI (DNI:String):Integer;
Function BuscarSocio(NumSocio:Integer):Boolean;
private
{ Private declarations }
procedure CambioControl(Sender: TObject);
public
{ Public declarations }
end;
Type
Registro = record
DNI: String[10];
Nombre: String[50];
Direccion: String[50];
Poblacion: String[50];
CodPostal: String[5];
Telefono: String[12];
end;

var
FrmBinario: TFrmBinario;
Fichero: file of Registro;
UnRegistro: Registro;
iRegActivo: integer;
iRegTotal: integer;
bAnyadiendo: boolean;

implementation

{$R *.DFM}

Procedure TFrmBinario.MoverCursor(iRegActivo: Integer);
begin
// Si el fichero está vacío
// deshabilita botones de navegación.
if Eof(Fichero) and
((iRegActivo = 0) or
(iRegActivo = 1)) then
begin
BtnAnterior.Enabled := False;
BtnPosterior.Enabled := False;
STContador.Caption := IntToStr(iRegActivo + 1) + ' / ' + IntToStr(iRegTotal + 1);
exit;
end;

// Posiciona el cursor del fichero.
Seek(Fichero, iRegActivo);

// Según la posición en que se encuentra
// habilita o deshabilita controles.
if Eof(Fichero) then
begin
Dec(iRegActivo);
Seek(Fichero, iRegActivo);
BtnPosterior.Enabled := False;
end;

if (iRegActivo = 0) {or}
{(iRegActivo = 1)} then
BtnAnterior.Enabled := False
else
BtnAnterior.Enabled := True;

if iRegActivo = iRegTotal then
BtnPosterior.Enabled := False
else
BtnPosterior.Enabled := True;

// Presenta en pantalla el número de registro.
STContador.Caption := IntToStr(iRegActivo + 1) + ' / ' + IntToStr(iRegTotal + 1);

EditDNI.SetFocus;
if bAnyadiendo then exit;

// Presenta los datos del registro
Read(Fichero,UnRegistro);
EditDNI.Text:=unRegistro.DNI;
EditNombre.Text := unRegistro.Nombre;
EditDireccion.Text := unRegistro.Direccion;
EditPoblacion.Text := unRegistro.Poblacion;;
EditCodPostal.Text := unRegistro.CodPostal;
EditTelefono.Text := unRegistro.Telefono;
end;

procedure TFrmBinario.BtnAnadirClick(Sender: TObject);
begin
GroupBox1.Enabled := True;
bAnyadiendo := True;
bbGrabar.Visible := True;
bbCancelar.Visible := True;

Inc(iRegTotal);
iRegActivo := iRegTotal;
Seek(Fichero,iRegTotal);
BtnUltimoClick(Sender);
EditDNI.Text:='';
EditNombre.Text:='';
EditDireccion.Text:='';
EditPoblacion.Text:='';
EditTelefono.Text:='';
EditCodPostal.Text:='';
EditDNI.SetFocus;
GroupBox2.Enabled := False;
end;
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

Segunda parte

Publicado por BigLuis (713 intervenciones) el 11/12/2006 13:13:09
Continua...........
procedure TFrmBinario.BBGrabarClick(Sender: TObject);
begin
Seek(Fichero,iRegActivo);
BBGrabar.Visible := False;
BBCancelar.Visible := False;
unRegistro.DNI:= EditDNI.Text;
unRegistro.Nombre := EditNombre.Text;
unRegistro.Direccion := EditDireccion.Text;
unRegistro.Poblacion := EditPoblacion.Text;
unRegistro.CodPostal := EditcodPostal.Text;
unRegistro.Telefono := EditTelefono.Text;
Write(Fichero,unRegistro);
GroupBox2.Enabled := True;
if bAnyadiendo then
BtnUltimoClick(sender);
bAnyadiendo := False;
end;

procedure TFrmBinario.BBCancelarClick(Sender: TObject);
begin
BBGrabar.Visible := False;
BBCancelar.Visible := False;
GroupBox2.Enabled := True;
if bAnyadiendo then
begin
Dec(iRegTotal);
iRegActivo := iRegTotal;
bAnyadiendo := False;
MoverCursor(iRegActivo);
end
else
MoverCursor(iRegActivo);

end;

procedure TFrmBinario.mnuAbrirClick(Sender: TObject);
begin
if not OpenD.Execute then
Exit
else
AssignFile(Fichero, OpenD.FileName);
if FileExists(OpenD.Filename) then
Reset(Fichero)
else
Rewrite(Fichero);

If not Eof(Fichero) then
Read(Fichero,unRegistro);

// contadores.
iRegActivo := 0;
iRegTotal := FileSize(Fichero) - 1;

// Función que mueve el puntero del fichero
// y activa o desactiva los controles.
GroupBox1.Enabled := True;
GroupBox2.Enabled := True;
MoverCursor(iRegActivo);
end;

procedure TFrmBinario.BtnPosteriorClick(Sender: TObject);
begin
inc(iRegActivo);
Seek(Fichero,iRegactivo);
MoverCursor(iRegActivo);
end;

procedure TFrmBinario.BtnAnteriorClick(Sender: TObject);
begin
dec(iRegActivo);
Seek(Fichero,iRegactivo);
MoverCursor(iRegActivo);
end;

procedure TFrmBinario.BtnPrimeroClick(Sender: TObject);
begin
iRegActivo := 0;
sEEK(fICHERO,iRegActivo);
MoverCursor(iRegActivo);
end;

procedure TFrmBinario.BtnUltimoClick(Sender: TObject);
begin
iRegActivo := iRegTotal;
MoverCursor(iRegActivo);
end;

procedure TFrmBinario.MnuSalirClick(Sender: TObject);
begin
Application.Terminate;
end;

procedure TFrmBinario.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := CambioControl;
end;

procedure TFrmBinario.CambioControl(Sender: TObject);
var
i: integer;
begin
for i:= 0 to GroupBox1.ControlCount-1 do
if GroupBox1.Controls[i] is TEdit then
with (GroupBox1.Controls[i] as TEdit) do
if Focused then
Color := clInfoBK
else
Color := clInactiveBorder;
end;

procedure TFrmBinario.BtnModificarClick(Sender: TObject);
begin
BBGrabar.Visible := True;
BBCancelar.Visible := True;
GroupBox1.Enabled := True;
GroupBox2.Enabled := False;
EditDNI.SetFocus;
end;

procedure TFrmBinario.Crear1Click(Sender: TObject);
begin
if not OpenD.Execute then
Exit
else
AssignFile(Fichero, OpenD.FileName);
if FileExists(OpenD.Filename) then
Reset(Fichero)
else
Rewrite(Fichero);

If not Eof(Fichero) then
Read(Fichero,unRegistro);

// contadores.
iRegActivo := 0;
iRegTotal := FileSize(Fichero) - 1;

// Función que mueve el puntero del fichero
// y activa o desactiva los controles.
GroupBox1.Enabled := True;
GroupBox2.Enabled := True;
MoverCursor(iRegActivo);

end;

Function TFrmBinario.BuscarDNI (DNI:String):Integer;
var
I,Final : Integer;
Encontrado : Boolean;
begin
Final:=iRegTotal-1;
Encontrado:=False;
BuscarDNI:=-1;
I:=0;
While not eof(Fichero) and (I<Final) and (not Encontrado) do
begin
seek(Fichero,I);
read(Fichero,unRegistro);
if unRegistro.DNI = DNI then
begin
Encontrado:=True;
BuscarDNI:=I;
end
else
Inc(I);
end;
end;

procedure TFrmBinario.BitBtn1Click(Sender: TObject);
var
I,Fin:Integer;
unRegistro:Registro;
F:TextFile;
NumSocio:Integer;
BuscarSocio:Boolean;
begin
Listado.Title:='Destino Listado Socios';
if listado.execute then
try
begin
Listado.Filename:='Socios.txt';
assignfile(F,Listado.Filename);
rewrite(f);
WriteLn(f,'Socios dados de alta en el Club');
Fin:=iRegTotal;
for I:=0 to fin-1 do
begin
NumSocio:=I;
if (NumSocio<iRegtotal) and (NumSocio>=0) then
begin
seek(Fichero,NumSocio);
read(Fichero,unRegistro);
BuscarSocio:=True;
end
else
BuscarSocio:=False;

//BuscarSocio(I,unRegistro);
writeLn(f,unRegistro.DNI+', '+unRegistro.Nombre+', '+unRegistro.Telefono);
end;
writeLn(f);
WriteLn(f,'Total '+InttoStr(fin)+' Socios');
end;
finally
closefile(f);
end;
showmessage('Listado Generado')
end;

Function TFrmBinario.BuscarSocio(NumSocio:Integer):Boolean;
Begin
if (NumSocio<iRegtotal) and (NumSocio>=0) then
begin
seek(Fichero,NumSocio);
read(Fichero,unRegistro);
BuscarSocio:=True;
end
else
BuscarSocio:=False;
end;

end.
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:Segunda parte

Publicado por Martin E. (7 intervenciones) el 11/12/2006 18:21:33
Muchas gracias amigo por el dato, lo voy a probar.

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:Segunda parte

Publicado por Martin E. (7 intervenciones) el 12/12/2006 08:33:03
Será mucho pedir que me envies la aplicación completa a mi mail (la unit con el form )para poder ver bien como esta aplicado el código ????
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:Segunda parte

Publicado por Martin E. (7 intervenciones) el 12/12/2006 18:07:31
si si, ese es mi correo. Gracias de antemano
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:Segunda parte

Publicado por Martin Ë. (7 intervenciones) el 15/12/2006 06:32:48
muchas gracias bigluis!!
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