Correccion de mi codigo :-( error fatal.. ayuda
Publicado por Mari (16 intervenciones) el 16/07/2014 07:19:35
Buenas noches,
Agradecería su valiosa ayuda,
Realizo un programa para eliminar empleados y ordenarlos por número de empleado.
Tengo mi procedimiento de eliminar y ordenar, (Uso archivos), pero tengo un problema, yo elimino el registro correctamente, eso creo, ya que al consultar no muestra el registro eliminado, pero al ordenar por numero de empleado sigue apareciendo. Como puedo hacer para que se actualice al ordenar? O es que tengo un error al eliminar mi registro? Agradecería mucho su ayuda. Estos son mis procedimientos.
procedure Eliminar (num:string); //Aqui es donde elimino al empleado
Var
ar : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error’);
readkey;
end
else
begin
for arch := 0 to filesize(f) - 1 do
begin
seek(f,ar);
read(f,Datos);
if Datos.num<> num then
begin
end
else
begin
Datos.activo := false;
seek(f,ar);
write(f,Datos);
writeln ('Empleado eliminado’);
end
else
end;
close(f);
end;
end;
procedure NumOrdenado; //Aquí es donde ordeno
var
E1, A : RegistroE;
ar, ar2 : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error’);
readln;
exit;
end
else
begin
for ar := 0 to filesize(f) - 1 do
for ar2 := filesize(f) - 1 downto ar + 1 do
begin
seek(f,ar);
read(f,Datos);
seek(f,ar2);
read(f,E1);
if Datos.num> E1.num then
begin
A := Datos;
Datos := E1;
E1 := A;
seek(f,ar);
write(f,Datos);
seek(f,ar2);
write(f,E1);
end;
end;
end;
close(f);
end;
procedure MostrarPacientesArchivo; // y aquí es donde maestro los empleados ordenados
var
z: longint;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln;
writeln(' Error’);
readln;
exit;
end
else
begin
for z := 0 to filesize(f) - 1 do
begin seek(f,z);
read(f,Datos);
writeln(Datos.Nom,' ',Datos.num);
end;
close(f);
writeln;
writeln(' Pulse Enter');
readln;
end;
end;
Agradecería su valiosa ayuda,
Realizo un programa para eliminar empleados y ordenarlos por número de empleado.
Tengo mi procedimiento de eliminar y ordenar, (Uso archivos), pero tengo un problema, yo elimino el registro correctamente, eso creo, ya que al consultar no muestra el registro eliminado, pero al ordenar por numero de empleado sigue apareciendo. Como puedo hacer para que se actualice al ordenar? O es que tengo un error al eliminar mi registro? Agradecería mucho su ayuda. Estos son mis procedimientos.
procedure Eliminar (num:string); //Aqui es donde elimino al empleado
Var
ar : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error’);
readkey;
end
else
begin
for arch := 0 to filesize(f) - 1 do
begin
seek(f,ar);
read(f,Datos);
if Datos.num<> num then
begin
end
else
begin
Datos.activo := false;
seek(f,ar);
write(f,Datos);
writeln ('Empleado eliminado’);
end
else
end;
close(f);
end;
end;
procedure NumOrdenado; //Aquí es donde ordeno
var
E1, A : RegistroE;
ar, ar2 : longint;
begin
assign (f, archi);
{$I-}rESET(f);{$I+}
if ioresult<>0 then
begin
writeln(' Error’);
readln;
exit;
end
else
begin
for ar := 0 to filesize(f) - 1 do
for ar2 := filesize(f) - 1 downto ar + 1 do
begin
seek(f,ar);
read(f,Datos);
seek(f,ar2);
read(f,E1);
if Datos.num> E1.num then
begin
A := Datos;
Datos := E1;
E1 := A;
seek(f,ar);
write(f,Datos);
seek(f,ar2);
write(f,E1);
end;
end;
end;
close(f);
end;
procedure MostrarPacientesArchivo; // y aquí es donde maestro los empleados ordenados
var
z: longint;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln;
writeln(' Error’);
readln;
exit;
end
else
begin
for z := 0 to filesize(f) - 1 do
begin seek(f,z);
read(f,Datos);
writeln(Datos.Nom,' ',Datos.num);
end;
close(f);
writeln;
writeln(' Pulse Enter');
readln;
end;
end;
Valora esta pregunta


0