Modificar campos fichero
Publicado por Jorge_K (1 intervención) el 03/01/2007 08:54:31
Hola.Tengo un fichero binario de datos con distintos campos como titulo,interprete,etc y quiero que mediante la opcion de un menú,al dar a la opcion modificar ,te deje modificar cualquier registro del fichero.Pero lo que me hace es borrarme todo el registro,no se me hace cosas muy raras.Alguien me puede echar una mano???
Procedure Modificar_Cancion(VAR datosC:tipo_fich_datos_C;VAR datosA:tipo_fich_datos_A);
VAR
posicionC:longint;
posicionA:longint;
registroC:tipo_reg_logico_C;
registroA:tipo_reg_logico_A;
AlbumCancion:tipo_album_A;
BEGIN
Buscar_Titulo(datosC,PorPantallaC,PorPantallaA,Existe,TituloCancion);
IF Existe THEN
BEGIN
(*me devuelve la posicion en el fichero datosC del interprete que quiero modificar*)
posicionC:=Buscar_Interprete(datosC,PorPantallaC);
seek(datosC,posicionC);
read(datosC,registroC);
AlbumCancion:=registroC.album;
(*me devuelve la posicion en el fichero datosA del album que quiero modificar*)
posicionA:=Buscar_Album_Pos(datosA,PorPantallaA,AlbumCancion);
Modificar_Reg_Cancion(datosC,datosA,posicionC,posicionA);
END;
END;
Procedure Modificar_Reg_Cancion(VAR datosC:tipo_fich_datos_C;VAR datosA:tipo_fich_datos_A;posicionC:longint;posicionA:longint);
VAR
registroC:tipo_reg_logico_C;
registroAuxC:tipo_reg_logico_C;
registroA:tipo_reg_logico_A;
opcion:integer;
i:integer;
TituloNuevo:tipo......
BEGIN
REPEAT
clrscr;
Writeln('¨Que campo deseas modificar?');
Writeln('1.Titulo');
Writeln('2.Interprete');
............
Writeln('12.No deseo modificar ningun dato mas datos');
Readln(opcion);
CASE opcion OF
1:BEGIN
Writeln('Introduce el nuevo titulo');
Readln(TituloNuevo);
FOR i:=length(TituloNuevo) to max_titulo DO
TituloNuevo:=TituloNuevo + ' ';
registroC.titulo:=TituloNuevo;
END;
2:BEGIN
Writeln('Introduce el nuevo interprete');
Readln(InterpreteNuevo);
FOR i:=length(InterpreteNuevo) to max_interprete DO
InterpreteNuevo:=InterpreteNuevo + ' ';
registroC.interprete:=InterpreteNuevo;
END;
3:BEGIN
.......
.......
.......
9:
ELSE Writeln('La opcion escogida es incorrecta');
END;
UNTIL (opcion =9);
Seek(datosC,posicionC);
Write(datosC,registroC);
Seek(datosA,posicionA);
Write(datosA,registroA);
END;
Procedure Modificar_Cancion(VAR datosC:tipo_fich_datos_C;VAR datosA:tipo_fich_datos_A);
VAR
posicionC:longint;
posicionA:longint;
registroC:tipo_reg_logico_C;
registroA:tipo_reg_logico_A;
AlbumCancion:tipo_album_A;
BEGIN
Buscar_Titulo(datosC,PorPantallaC,PorPantallaA,Existe,TituloCancion);
IF Existe THEN
BEGIN
(*me devuelve la posicion en el fichero datosC del interprete que quiero modificar*)
posicionC:=Buscar_Interprete(datosC,PorPantallaC);
seek(datosC,posicionC);
read(datosC,registroC);
AlbumCancion:=registroC.album;
(*me devuelve la posicion en el fichero datosA del album que quiero modificar*)
posicionA:=Buscar_Album_Pos(datosA,PorPantallaA,AlbumCancion);
Modificar_Reg_Cancion(datosC,datosA,posicionC,posicionA);
END;
END;
Procedure Modificar_Reg_Cancion(VAR datosC:tipo_fich_datos_C;VAR datosA:tipo_fich_datos_A;posicionC:longint;posicionA:longint);
VAR
registroC:tipo_reg_logico_C;
registroAuxC:tipo_reg_logico_C;
registroA:tipo_reg_logico_A;
opcion:integer;
i:integer;
TituloNuevo:tipo......
BEGIN
REPEAT
clrscr;
Writeln('¨Que campo deseas modificar?');
Writeln('1.Titulo');
Writeln('2.Interprete');
............
Writeln('12.No deseo modificar ningun dato mas datos');
Readln(opcion);
CASE opcion OF
1:BEGIN
Writeln('Introduce el nuevo titulo');
Readln(TituloNuevo);
FOR i:=length(TituloNuevo) to max_titulo DO
TituloNuevo:=TituloNuevo + ' ';
registroC.titulo:=TituloNuevo;
END;
2:BEGIN
Writeln('Introduce el nuevo interprete');
Readln(InterpreteNuevo);
FOR i:=length(InterpreteNuevo) to max_interprete DO
InterpreteNuevo:=InterpreteNuevo + ' ';
registroC.interprete:=InterpreteNuevo;
END;
3:BEGIN
.......
.......
.......
9:
ELSE Writeln('La opcion escogida es incorrecta');
END;
UNTIL (opcion =9);
Seek(datosC,posicionC);
Write(datosC,registroC);
Seek(datosA,posicionA);
Write(datosA,registroA);
END;
Valora esta pregunta


0