
Eliminar un registro de un archivo
Publicado por Atenea (2 intervenciones) el 10/01/2023 04:25:57
Buenas.
Me encuentro haciendo un trabajo final de la facultad y estoy un poco perdida de cómo hacer un procedimiento para eliminar un registro de un archivo. Por lo que tengo entendido hay que pasar todos los registros que no se desean eliminar a un archivo nuevo para luego eliminar el archivo anterior con el registro que se desea eliminar y renombrar el archivo. Intente hacer el código pero me da error y no logro identificar el por qué.
Si alguien me puede ayudar se lo agradecería.
RUTTA='C:\Users\atenea\OneDrive\Escritorio\Proyecto Final/archivot';
PROCEDURE ELIMINAR_TERRENO(var ARCH_CONTRIBUYENTE:T_ARCHIVOC;VAR ARCH_TERRENO:T_ARCHIVOT;POSICION:T_PUNT);
VAR
ARCH_NUEVO:T_ARCHIVOT;
REG,REGI:T_TERRENOS;
X:T_PROPIETARIOS;
AUX:STRING[8];
I:BYTE;
DATO:STRING;
BEGIN
SEEK(ARCH_CONTRIBUYENTE,POSICION^.INFO.POS-1);
READ(ARCH_CONTRIBUYENTE,X);
AUX:=X.NUM; //NUMERO DE CONTRIBUYENTE
//ABRIR_TERRENO(ARCH_TERRENO)
ASSIGN(ARCH_TERRENO,RUTTA);
{$I-}
RESET(ARCH_TERRENO);
{$+}
IF IORESULT<>0 THEN
REWRITE(ARCH_TERRENO);
//NUEVO ARCHIVO
ASSIGN(ARCH_NUEVO,RUTTA);
REWRITE(ARCH_NUEVO);
FOR I:=0 TO FILESIZE(ARCH_TERRENO)-1 DO
BEGIN
SEEK(ARCH_TERRENO,I);
READ(ARCH_TERRENO,REG);
IF REG.NUME<> AUX THEN
BEGIN
REGI.NUME:=REG.NUME;
REGI.NUM_MENSURA:=REG.NUM_MENSURA;
REGI.VALOR:=REG.VALOR;
REGI.FECHA_INS:= REG.FECHA_INS;
REGI.DOM_PARCEL:= REG.DOM_PARCEL;
REGI.SUP_TERRENO:=REG.SUP_TERRENO;
REGI.ZONA:=REG.ZONA;
REGI.TIPO_EDIF:=REG.TIPO_EDIF;
END;
CLOSE(ARCH_NUEVO);
CLOSE(ARCH_TERRENO);
Erase(ARCH_TERRENO);
Rename(ARCH_NUEVO,'ARCH_TERRENO');
end;
END;
Me encuentro haciendo un trabajo final de la facultad y estoy un poco perdida de cómo hacer un procedimiento para eliminar un registro de un archivo. Por lo que tengo entendido hay que pasar todos los registros que no se desean eliminar a un archivo nuevo para luego eliminar el archivo anterior con el registro que se desea eliminar y renombrar el archivo. Intente hacer el código pero me da error y no logro identificar el por qué.
Si alguien me puede ayudar se lo agradecería.
RUTTA='C:\Users\atenea\OneDrive\Escritorio\Proyecto Final/archivot';
PROCEDURE ELIMINAR_TERRENO(var ARCH_CONTRIBUYENTE:T_ARCHIVOC;VAR ARCH_TERRENO:T_ARCHIVOT;POSICION:T_PUNT);
VAR
ARCH_NUEVO:T_ARCHIVOT;
REG,REGI:T_TERRENOS;
X:T_PROPIETARIOS;
AUX:STRING[8];
I:BYTE;
DATO:STRING;
BEGIN
SEEK(ARCH_CONTRIBUYENTE,POSICION^.INFO.POS-1);
READ(ARCH_CONTRIBUYENTE,X);
AUX:=X.NUM; //NUMERO DE CONTRIBUYENTE
//ABRIR_TERRENO(ARCH_TERRENO)
ASSIGN(ARCH_TERRENO,RUTTA);
{$I-}
RESET(ARCH_TERRENO);
{$+}
IF IORESULT<>0 THEN
REWRITE(ARCH_TERRENO);
//NUEVO ARCHIVO
ASSIGN(ARCH_NUEVO,RUTTA);
REWRITE(ARCH_NUEVO);
FOR I:=0 TO FILESIZE(ARCH_TERRENO)-1 DO
BEGIN
SEEK(ARCH_TERRENO,I);
READ(ARCH_TERRENO,REG);
IF REG.NUME<> AUX THEN
BEGIN
REGI.NUME:=REG.NUME;
REGI.NUM_MENSURA:=REG.NUM_MENSURA;
REGI.VALOR:=REG.VALOR;
REGI.FECHA_INS:= REG.FECHA_INS;
REGI.DOM_PARCEL:= REG.DOM_PARCEL;
REGI.SUP_TERRENO:=REG.SUP_TERRENO;
REGI.ZONA:=REG.ZONA;
REGI.TIPO_EDIF:=REG.TIPO_EDIF;
END;
CLOSE(ARCH_NUEVO);
CLOSE(ARCH_TERRENO);
Erase(ARCH_TERRENO);
Rename(ARCH_NUEVO,'ARCH_TERRENO');
end;
END;
Valora esta pregunta


0