Pascal/Turbo Pascal - Modificacion de registros en un archivo de registr

 
Vista:

Modificacion de registros en un archivo de registr

Publicado por luistorcol (8 intervenciones) el 24/05/2010 15:07:04
Hola, me gustaría que me facilitaran un código de modificación de registros en un archivo de registros. Lo necesito para que me sirva de ejemplo para realizar la modificación en el programa que estoy haciendo. Si se hace uso del gotoxy para pedir los datos, mejor aún. Lo necesito con premura porque no tengo ni idea de como hacerlo. Saludos.
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:Modificacion de registros en un archivo de regi

Publicado por edwin (71 intervenciones) el 26/05/2010 06:05:19
mira date una vuelta por este foro ahi hay un ejemplo de manejo de registros con archivos y algo mas , tendras que registrate...

esto con el fin de no pegar el codigo por aqui...
http://foros.solocodigo.com/viewtopic.php?f=34&t=40772
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:Modificacion de registros en un archivo de regi

Publicado por luistorcol (8 intervenciones) el 31/05/2010 18:59:53
Edwin, pero ese ejemplo no se entiende nada, practicamente todo está hecho en las unidades que se incluyen al comienzo del programa, eso no me ilustra nada.

Por favor, ¿me podrías recomendar algún libro en español de turbo pascal, donde pueda conseguir lo referente a Incluir, Eliminar, MODIFICAR, Consultar registros en archivos?. De antemano, 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:Modificacion de registros en un archivo de regi

Publicado por edwin (71 intervenciones) el 02/06/2010 20:06:35
libro en especifico, no lo se...hacemucho que no leo libros de pascal

mmm, pero lo que si tienes que leer , son las intrucciones basicas de pascal
como :
* apertura del archivo
* busqueda de un registro

Esto con el fin de hacer despues de acuerdo a su posicion modificarlo , borrarlo.

En cuanto a inclusion pues lo mas facil es posicionar al final del archivo y guardar el registro..

veremos si puedo sintetizar , las funciones y lo posteo por aki
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:Modificacion de registros en un archivo de regi

Publicado por edwin (71 intervenciones) el 03/06/2010 22:05:26
ya tengo listas las funciones y procedimientos para ejemplificar el uso de archivos, de una manera sencilla

no alcanza por este foro
lo pegare por partes
program ejemplo_archivos;
uses crt,dos,sysutils;
{en este ejemplo se reflejar  el uso de registros con archivos
haciendo el uso de insercion, modificacion , y borrado fisico de los
registros}

type
TipoRegistro = Record
Numero : Longint;
Nombre : String[40];
Direccion : String[40];
Telefono : String[10];
End;

TipoArchivo = File Of TipoRegistro;

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure AperturaDeArchivo(var TArchivo:Tipoarchivo);
var
Error: Word;
Tecla:Char;
Begin
Assign(TArchivo,'c:\Archivo.dat');
{$I-}
Reset(TArchivo);
Error:=IOResult;
{$I+}
If Error <> 0 Then
Begin
textattr:=14+4*16;
gotoxy(4,24);write('Creando Bases Temporal !! ');
rewrite(TArchivo);
End;
End;

{*------|------|------|------|------|------|------|------|------|------|----*}

procedure AperturaDeArchivoTemporal(var TTmpAArchivo:TipoArchivo);
var
Error: word;
Tecla:Char;
Begin
Assign(TTmpAArchivo,'c:\Archivo.Tmp');
{$I-}
Reset(TTmpAArchivo);
Error:=IOResult;
{$I+}
If Error <> 0 Then
Begin
textattr:=14+4*16;
gotoxy(4,24);write('Creando Bases Temporal !! ');
rewrite(TTmpAArchivo);
End;
End;

{*------|------|------|------|------|------|------|------|------|------|----*}

function BuscaRegistro(Var AArchivo:tipoArchivo;Var TIRegistro:TipoRegistro;Numero:LongInt):longint;
Var
Encontrado:longint;
Begin
textattr:=14+4*16;
gotoxy(4,24);write('Buscando Registro..');

Encontrado :=-1; {inicializamos Encontrado a -1, valor inexistente}
Seek(AArchivo,0); {Posicionamos al inicio el puntero del archivo}
While not EOF(AArchivo) do {iniciamos ciclode recorrido del archivo}
Begin
Read(AArchivo,TIRegistro); {Leemos el Registro segun posicion del puntero}
IF TIRegistro.Numero = Numero then {Comparamos el n£mero de registo con el numero solicitado}
Begin {si es igual el registro encontrado}
Encontrado:=FilePos(AArchivo)-1; {se envia la posicion del registro hallado}
Seek(AARchivo,FileSize(AArchivo)); {se envia el puntero al final del archivo para terminar ciclo}
End;
End;
IF Encontrado <> -1 then {si Encontrado no es igual a -1 , mandamos el valor de la funcion}
Begin
BuscaRegistro:=Encontrado;
End
Else {si no fue encontrado regresamos -1 a la busqueda}
Begin
BuscaRegistro:=-1;
End;
textattr:=0+2*16;
gotoxy(4,24);write(' ');
End;

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure BorraRegistro(Var AArchivo:Tipoarchivo; TIRegistro:TipoRegistro;Numero:LongInt);
var
TmpArchivo:tipoArchivo;
TmpRegistro:tipoRegistro;
EncontradoB:longint;
Begin {Buscamos si existe el Registro a borrar}
EncontradoB:=BuscaRegistro(AArchivo,TIRegistro,Numero);
IF EncontradoB <> -1 then {Si existe}
Begin
seek(AArchivo,0); {nos posicionamos al inicio del archivo}
While not eof(AArchivo) do {hacemos un ciclo de vaciado de registros a un archivo temporal menos el eliminado}
Begin
Read(AArchivo,TIRegistro); {leemos el registro completo}
IF TIRegistro.Numero <> Numero then {comparamos el campo Registro.numero con el solicitado }
Begin
AperturaDeArchivoTemporal(TmpArchivo); {creamos el temporal}
seek (TmpArchivo,filesize(TmpArchivo)); {nos posicionamos al final del archivo temporal}
write(TmpArchivo,TIRegistro); {escribimos el registro}
Close(TmpArchivo);{cerramos el registro}
End;
End;
Close(AArchivo); {cerramos la bd de trabajo}
erase(AArchivo); {eliminamos la bd de trabajo}
{ se puede usar en caso de no contar con la utileria sysutils
Assign(TmpArchivo,'c:\Archivo.Tmp');
Rename(TmpArchivo,'c:\Archivo.dat') }

If RenameFile ('c:\Archivo.tmp','c:\Archivo.dat') then
begin
Gotoxy(3,24);write('Registro Eliminado');
Delay(600);
End;
End {encontrado <> -1}
Else
Begin
textattr:=14+4*16;
gotoxy(27,12);write('No Hallado ......!! ');
Delay(1000);
Close(AArchivo); {cerramos la bd de trabajo}
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:Modificacion de registros en un archivo de regi

Publicado por edwin (71 intervenciones) el 03/06/2010 22:06:20
segunda parte

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure InicializaRegistro(Var TiRegistro : TipoRegistro);
Begin
TiRegistro.Numero :=0;
TiRegistro.Nombre :='';
TiRegistro.Direccion:='';
TiRegistro.Telefono :='';
End;

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure Alta(TiRegistro:TipoRegistro;Var TiArchivo :TipoArchivo);
Var
Encontrado:Longint;
TmpNumero:Longint;
Salir:char;
Begin
Repeat
InicializaRegistro(TiRegistro);
textattr:=7+0*16;{atributos de pantalla}
Clrscr;
Gotoxy(25,4);write('Alta de Registro');
Gotoxy(25,10);write('Proporcione Numero : ');
readln(TmpNumero);

AperturaDeArchivo(TIArchivo); {aperturamos el archivo}
Encontrado:= BuscaRegistro(TiArchivo,TIRegistro,TmpNumero); {buscamos el registro}
Close(Tiarchivo); {cerramos el archivo}
If Encontrado = -1 Then {no existe}
Begin
textattr:=7+0*16;{atributos de pantalla}
Tiregistro.Numero:=TmpNumero;
Gotoxy(25,12);write('Proporcione Nombre : ');
readln(TiRegistro.Nombre );
Gotoxy(25,14);write('Proporcione Direccion : ');
readln(TiRegistro.Direccion );
Gotoxy(25,16);write('Proporcione Tel‚fono : ');
readln(TiRegistro.Telefono);
{posicionamos el puntero al final del archivo y guardamos}
AperturaDeArchivo(TIArchivo);
Seek (TIArchivo,filesize(TIArchivo));{posicionamos el puntero al final del archivo}
Write(TiArchivo,TiRegistro);{guardamos el registro al final del archivo}
Close(TiArchivo);
delay(100);
End
else {si existe}
begin
Gotoxy(15,17);write('Registro Existente,Pulse Enter');
readkey;
end;
gotoxy(20,22);write('Desea Continuar Almacenando Registros [S/N]');
Salir:=Readkey;
Until (Salir='n') or (Salir='N');
End;

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure Baja(TiRegistro:TipoRegistro;Var TiArchivo :TipoArchivo);
Var
Encontrado:Longint;
TmpNumero:Longint;
Salir:char;
Begin
Repeat
InicializaRegistro(TiRegistro);
textattr:=7+0*16;{atributos de pantalla}
Clrscr;
Gotoxy(25,4);write('Baja de Registro');
Gotoxy(25,10);write('Proporcione Numero : ');
readln(TmpNumero);
AperturaDeArchivo(TIArchivo); {aperturamos el archivo}
Encontrado:= BuscaRegistro(TiArchivo,TIRegistro,TmpNumero); {buscamos el registro}
Close(Tiarchivo); {cerramos el archivo}
If Encontrado <> -1 Then {existe}
Begin
AperturaDeArchivo(TIArchivo); {aperturamos el archivo}
BorraRegistro(Tiarchivo,TIRegistro,TmpNumero);
End
Else
Begin
Gotoxy(15,17);write('Registro No Existe,Pulse Enter');
readkey;
End;
Gotoxy(20,22);Write('Desea Continuar Dando de Baja a Registros [S/N]');
Salir:=Readkey;
Until (Salir='n') or (Salir='N');

End;

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure Modificacion(TiRegistro:TipoRegistro;Var TiArchivo :TipoArchivo);
Var
Encontrado:Longint;
Salir:char;
Begin
Repeat
InicializaRegistro(TiRegistro);
textattr:=7+0*16;{atributos de pantalla}
Clrscr;
Gotoxy(25,4);write('Modificacion de Registro');
Gotoxy(25,10);write('Proporcione Numero : ');
readln(TiRegistro.Numero);

AperturaDeArchivo(TIArchivo); {aperturamos el archivo}
Encontrado:= BuscaRegistro(TiArchivo,TIRegistro,TiRegistro.Numero); {buscamos el registro}
Close(Tiarchivo); {cerramos el archivo}
If Encontrado <> -1 Then {existe}
Begin
textattr:=7+0*16;{atributos de pantalla}
Gotoxy(25,12);write('Proporcione Nombre : ');
readln(TiRegistro.Nombre );
Gotoxy(25,14);write('Proporcione Direccion : ');
readln(TiRegistro.Direccion );
Gotoxy(25,16);write('Proporcione Tel‚fono : ');
readln(TiRegistro.Telefono);
AperturaDeArchivo(TIArchivo); {aperturamos el archivo}
seek (TIArchivo,Encontrado);{posicionamos el p£ntero en la posici¢n donde se encontr¢ el registro en el archivo}
write(TiArchivo,TiRegistro);{escribimos el registor modificado}
close(TiArchivo);
End
Else
Begin
Gotoxy(15,17);write('Registro No Existe,Pulse Enter');
readkey;
End;
Gotoxy(20,22);Write('Desea Continuar Modificando Registros [S/N]');
Salir:=Readkey;
Until (Salir='n') or (Salir='N');
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:Modificacion de registros en un archivo de regi

Publicado por edwin (71 intervenciones) el 03/06/2010 22:07:13
tercera parte

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure Consulta(TiRegistro:TipoRegistro;Var TiArchivo :TipoArchivo);
Var
Encontrado:Longint;
Salir:char;
Begin
Repeat
InicializaRegistro(TiRegistro);
textattr:=7+0*16;{atributos de pantalla}
Clrscr;
Gotoxy(25,4);write('Consulta de Registro');
Gotoxy(25,10);write('Proporcione Numero : ');
readln(TiRegistro.Numero);
AperturaDeArchivo(TIArchivo); {aperturamos el archivo}
Encontrado:= BuscaRegistro(TiArchivo,TIRegistro,TiRegistro.Numero); {buscamos el registro}
Close(Tiarchivo); {cerramos el archivo}
If Encontrado <> -1 Then {existe}
Begin
textattr:=7+0*16;{atributos de pantalla}
Gotoxy(25,12);write('Nombre : ',TiRegistro.Nombre );
Gotoxy(25,14);write('Direccion : ',TiRegistro.Direccion );
Gotoxy(25,16);write('Tel‚fono : ',TiRegistro.Telefono);
End
Else
Begin
Gotoxy(15,17);write('Registro No Existe,Pulse Enter');
readkey;
End;
Gotoxy(20,22);Write('Desea Continuar Consultando Registros [S/N]');
Salir:=Readkey;
Until (Salir='n') or (Salir='N');
End;

{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure Listado(TiRegistro:TipoRegistro;var TiArchivo:tipoArchivo);
Var
Contador:integer;
Begin
textattr:=7+0*16;{atributos de pantalla}
Clrscr;
Gotoxy(2,2);write('Numero Nombre Direccion');
Seek(TiArchivo,0); {Posicionamos al inicio el puntero del archivo}
contador:=3;
While not eof(TiArchivo) do
Begin
Read(TiArchivo,TIRegistro); {Leemos el Registro segun posicion del puntero}
gotoxy(2,contador); Write(TIRegistro.Numero);
gotoxy(17,contador); Write(TIRegistro.Nombre);
gotoxy(47,contador); Write(TIRegistro.Direccion);
inc(contador);
End;
readkey;
End;
{*------|------|------|------|------|------|------|------|------|------|----*}

Procedure Menu(TiRegistro:TipoRegistro; Var TiArchivo:TipoArchivo);
Var
Tecla:Char;
Begin
ClrScr;
Repeat
textattr:=7+0*16;{atributos de pantalla}
ClrScr;
Gotoxy(25,6);Write('Alta de Registro ..............[1]');
Gotoxy(25,8);Write('Modificacion de Registro ......[2]');
Gotoxy(25,10);Write('Baja de Registro ..............[3]');
Gotoxy(25,12);Write('Consulta de Registro ..........[4]');
Gotoxy(25,14);Write('Listado de Registros...........[5]');
Gotoxy(25,16);Write('Salir .........................[6]');
Tecla:=Readkey;
Case Tecla of
'1':Begin
Alta(Tiregistro,TiArchivo);
End;
'2':Begin
Modificacion(TiRegistro,TiArchivo );
End;
'3':Begin
Baja(TiRegistro,TiArchivo );
End;
'4':Begin
Consulta(TiRegistro,TiArchivo );
End;
'5':Begin
AperturaDeArchivo(Tiarchivo);
Listado(TiRegistro,TiArchivo);
Close(TiArchivo);
End;
End;
Until Tecla = '6';
end;
var
TiArchivo : TipoArchivo;
TiRegistro : TipoRegistro;
Begin
Menu(TiRegistro,TiArchivo);
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:Modificacion de registros en un archivo de regi

Publicado por Lucia (2 intervenciones) el 22/05/2012 15:22:07
Hola, queria consultarte, quiero compilar lo que creaste, pero me dice que no identifique RenameFile... como puedo hacer para que funcione.. gracias! estoy haciendo un proyecto para la facultad que consta de 3 archivos, me ayudaria mucho ver como funciona tu propuesta. muchas gracias! 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:Modificacion de registros en un archivo de regi

Publicado por PopI (1 intervención) el 14/07/2012 17:58:34
Me encanta, lo hice en Delphi 7 y funciona de manera perfecta, solo con declarar una unidad llamada Console (http://rvelthuis.de/downloads.html) en Uses que emula el Crt de Turbo Pascal, 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:Modificacion de registros en un archivo de regi

Publicado por edwin (71 intervenciones) el 03/06/2010 22:23:38
y si te das cuenta se utiliza las mismas intrucciones que en el programa que bajaste , solo que sin decoracion..
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:Modificacion de registros en un archivo de regi

Publicado por luistorcol (1 intervención) el 04/06/2010 15:02:40
¡Wow, mil gracias!!!. Voy a comenzar a estudiarmelo. Una última pregunta: ¿se pueden tener instalados simultáneamente Turbo Pascal 7 y Freepascal en un mismo computador?. Gracia de nuevo.
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