Pascal/Turbo Pascal - Apareo de 4 Archivos

 
Vista:

Apareo de 4 Archivos

Publicado por dargon (1 intervención) el 01/10/2007 15:14:06
Tengo estos 4 archivos ordenados cronologicamente, que contienen las infracciones de un año calendario:ZONA1.DAT, ZONA2.DAT, ZONA3.DAT, ZONA4.DAT

Cada registro de los archivos contiene:

Nro.patente Nro.reg.conductor Fecha infrac. Cód.destac. policial Cód.infrac.
Ej: B153 17452369 1(dd) 1(mm)97(aa) 1524 2374

Nro.ident.policial
ej: GNQWA

Se pide generar un único archivo a partir de esos .

Yo codifiqué esto, pero el proceso nunca termina, sigue sumando y haciendo màs grande el primer archivo auxiliar que utilizé (ZONAU). Creo que el error està en el apareo, el cual quize hacer con un único ciclo mientras (Que se abandone el ciclo cuando los dos archivos se hayan leido completante, es decir, se les haya asignado el valor más alto ficticio). No se pueden usar arreglos.

----------------------------


const
HV=13; {Una especie de HIGH_VALUE, es decir, el valor más alto}

Type
str4=string[4];
str5=string[5];
RegFecha=record
dd:byte;
mm:byte;
aa:byte;
end;
RegZona=record
NroPat:str4;
NroReg:longint;
Fecha:RegFecha;
CodDesPol,
CodInf:word;
NroIdPol:str5;
end;
ArcZona=file of RegZona;

procedure Abrir(var Zona1, Zona2, Zona3, Zona4, Zona, Aux1, Aux2:ArcZona);
begin
assign(Zona1,'Zona1.dat');
assign(Zona2,'Zona2.dat');
assign(Zona3,'Zona3.dat');
assign(Zona4,'Zona4.dat');
assign(Aux1,'ZonaU.tml');
assign(Aux2,'ZonaD.tml');
assign(Zona,'Zona.dat');
filemode:=0;
reset(zona1);
reset(zona2);
reset(zona3);
reset(zona4);
rewrite(Aux1);
rewrite(Aux2);
rewrite(zona)
end;

procedure LecEsp (var zona:ArcZona; rzona:RegZona);
begin
if not eof(zona) then begin
read(zona,rzona);
end
else
rzona.fecha.mm:= HV
end;


procedure Apareo(var ZonaA, ZonaB, Aux:ArcZona);
var
rZonaA,
rZonaB:RegZona;

begin
LecEsp(ZonaA,rZonaA);
LecEsp(ZonaB,rZonaB);
while (rZonaA.fecha.mm <> HV) or (rZonaB.fecha.mm <> HV) do begin
if rZonaA.fecha.mm = rZonaB.fecha.mm then
begin
if rZonaA.fecha.dd <= rZonaB.fecha.dd then begin
write(Aux,rZonaA);
LecEsp(ZonaA,rZonaA)
end
else begin
write(Aux,rZonaB);
LecEsp(ZonaB,rZonaB)
end
end
else begin
if rZonaA.fecha.mm < rZonaB.fecha.mm then begin
write(Aux,rZonaA);
LecEsp(ZonaA,rZonaA)
end
else begin
write(Aux,rZonaB);
LecEsp(ZonaB,rZonaB)
end
end
end;
seek(Aux,0)
end;

procedure CerrarElimAux(var Aux1,Aux2:ArcZona);
begin
close(Aux1);
close(Aux2);
erase(Aux1);
erase(Aux2)
end;

procedure Cerrar(var Zona1, Zona2, Zona3, Zona4, Zona:ArcZona);
begin
close(zona1);
close(zona2);
close(zona3);
close(zona4);
close(zona)
end;
var
Zona1, Zona2,
Zona3, Zona4,
Aux1,Aux2,
Zona :ArcZona;

begin {Bloque Principal}
Abrir(Zona1, Zona2, Zona3, Zona4, Zona, Aux1, Aux2);
Apareo(Zona1, Zona2, Aux1);
Apareo(Zona3, Zona4, Aux2);
Apareo(Aux1, Aux2, Zona);
CerrarElimAux(Aux1,Aux2);
Cerrar(Zona1,Zona2,Zona3,Zona4,Zona)
end.
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:Apareo de 4 Archivos

Publicado por Cristian (1 intervención) el 05/10/2007 06:45:43
Jajajajaj son para el tp de algoritmos de la utn??

jaja el error que hiciste es una ree boludez,

procedure LecEsp (var zona:ArcZona; rzona:RegZona);

te falto un var, en realidad es

procedure LecEsp (var zona:ArcZona; VAR rzona:RegZona);

con eso se soluciona!!!

Ahhhhh y si sabes como hacer que del archivo ZONAS,DAT haga un archivo txt, te pido uqe me lo mandes al mail, poruqe yo hice algo parecido pero se me hace un txt con todos caracteres raros, asi que si podes pasar el contenido de ZONAS.Dat a un txt te pido uqe me lo mandes al mail, te voy a estar muy agradecido!!

Un saludo cheee, suerteee
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:Apareo de 4 Archivos

Publicado por juan manuel (1 intervención) el 21/10/2009 18:01:49
hola que tal?
queria saber si este es el tp de cuello de la utn, porque tengo que hacer un ejercicio muy similar, con algunas variantes.
pero en la parte del apareo puedo resolverlo a medias.
tengo problemas con la lecturaEspecial, ya que tengo que pasar por parametros una variable booleana para que detecte el fin de archivo, porque con HV no puedo.
se que este trabajo fue hace mucho pero si por esas casualidades todavia lo conservas, me serviria que me lo pases para darle una leida.

muchas 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