Pascal/Turbo Pascal - Problema al Aparear Archivos

 
Vista:

Problema al Aparear Archivos

Publicado por Damian (2 intervenciones) el 13/09/2012 00:57:17
Hola, tengo 4 archivos,debo aparearlos y generar solo uno. El error que aún no encuentro es que cuando compilo y lo hago correr, voy a la carpeta "BIN" de pascal, para ver si se creó el archivo final del apareo(BSAS), y solo me aparece "Zona34.dat"

Les dejo el código.

Program Tp1;

uses crt;


const
HIGH_VALUE= 1232;

type
Str4= string [4];
Str5= string [5];
RegFecha= record
dd,
mm: byte;
aaaa:word
end;
RegZona= record
NroPat: Str4;
NroRegCond: longint;
rFecinf: RegFecha;
CodDestPol,
CodInfr: word;
NroIdPol: Str5;
end;
ArcZona= file of RegZona;

Procedure Abrir (var Zona1, Zona2, Zona3, Zona4, BSAS, Zona12, Zona34:ArcZona);

Begin
Assign (Zona1, 'Zona1.dat');
Assign (Zona2, 'Zona2.dat');
Assign (Zona3, 'Zona3.dat');
Assign (Zona4, 'Zona4.dat');
Filemode:=0;
Reset (Zona1);
Reset (Zona2);
Reset (Zona3);
Reset (Zona4);
Assign (Zona12, 'Zona12.dat');
Rewrite (Zona12);
Assign (Zona34, 'Zona34.dat');
Rewrite (Zona34);
Assign (BSAS, 'BSAS.dat');
Rewrite (BSAS);
end;

Procedure LecEsp (var f:ArcZona; var r:RegZona; var Cv:word);
Begin
if not eof(f) then begin
read(f,r);
cv:= r.rFecInf.mm*100+r.rFecInf.dd;
end
Else begin
cv:= HIGH_VALUE;
end;
end;

Procedure Apareo (var Mae, Nov, NovMae:ArcZona);

var
rMae,
rNov,
rNovMae:RegZona;
Clv1,
Clv2:word;
Begin
LecEsp(Mae, rMae, clv1);
LecEsp(Nov, rNov, clv2);
While (Clv1 <> HIGH_VALUE) or (Clv2 <> HIGH_VALUE) do Begin
If Clv1 < Clv2 then begin
rNovMae:= rMae;
write(NovMae, rNovMae);
LecEsp(Mae, rMae, clv1);
end
Else Begin
rNovMae:= rNov;
write(NovMae, rNovMae);
LecEsp(Nov, rNov, clv2);
end;
end;
Seek(NovMae,0)
end;

Procedure Cerrar (var Zona1, Zona2, Zona3, Zona4,Zona12,Zona34,BSAS:ArcZona);

begin
close(Zona1);
close(Zona2);
close(Zona3);
close(Zona4);
close(BSAS);
close(Zona12);
Erase(Zona12);
close(Zona34);
Erase(Zona34);
end;

Var
Zona1,
Zona2,
Zona3,
Zona4,
Zona12,
Zona34,
BSAS:ArcZona;


Begin {BLOQUE PRINCIPAL}
Abrir(Zona1, Zona2, Zona3, Zona4, Zona12, Zona34, BSAS);
Apareo(Zona1,Zona2,Zona12);
Apareo(Zona3,Zona4,Zona34);
Apareo(Zona12,Zona34,BSAS);
Cerrar(Zona1,Zona2,Zona3,Zona4,Zona12,Zona34,BSAS);
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

Problema al Aparear Archivos

Publicado por ramon (2158 intervenciones) el 15/09/2012 16:02:27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
{Primero para abrir un archivo tienes que darle assigne(f,'nombre. extensión') pero des pues
 de ves de crearlo con rewrite(f) de lo contrario no abras echo nada.
 Mira la corrección que te pongo.
 
 
  Program Tp1;
 
 uses
   crt;
 
 
  const
    HIGH_VALUE = 1232;
 
 type
    Str4 = string [4];
    Str5 = string [5];
    RegFecha = record
           dd, mm : byte;
             aaaa : word
         end;
 
     RegZona = record
           NroPat : Str4;
       NroRegCond : longint;
          rFecinf : RegFecha;
       CodDestPol, CodInfr : word;
         NroIdPol : Str5;
       end;
      ArcZona = file of RegZona;
 
  var
    Zona1, Zona2, Zona3, Zona4, BSAS, Zona12, Zona34 : ArcZona;
    Cv : word;
 
  Procedure Abrir;
 Begin
      Assign (Zona1, 'Zona1.dat');
      Rewrite(Zona1);
      Assign (Zona2, 'Zona2.dat');
      Rewrite(Zona2);
      Assign (Zona3, 'Zona3.dat');
      Rewrite(Zona3);
      Assign (Zona4, 'Zona4.dat');
      Rewrite(Zona4);
      Assign(Zona12, 'Zona12.dat');
      Rewrite(Zona12);
      Assign(Zona34, 'Zona34.dat');
      Rewrite(Zona34);
      Assign(BSAS, 'BSAS.dat');
      Rewrite(BSAS);
   end;
 
   Procedure LecEsp (var f : ArcZona; var r : RegZona; var Cv : word);
   Begin
      if not eof(f) then
      begin
        read(f,r);
        cv := r.rFecInf.mm * 100 + r.rFecInf.dd;
     end
   Else
     begin
     cv := HIGH_VALUE;
   end;
  end;
 
  Procedure Apareo(var Mae, Nov, NovMae : ArcZona);
  var
   rMae, rNov, rNovMae : RegZona;
   Clv1, Clv2 : word;
  Begin
    LecEsp(Mae, rMae, clv1);
    LecEsp(Nov, rNov, clv2);
    While (Clv1 <> HIGH_VALUE) or (Clv2 <> HIGH_VALUE) do
    Begin
       If Clv1 < Clv2 then
       begin
         rNovMae := rMae;
         write(NovMae, rNovMae);
         LecEsp(Mae, rMae, clv1);
      end
   Else
      Begin
        rNovMae := rNov;
        write(NovMae, rNovMae);
        LecEsp(Nov, rNov, clv2);
      end;
   end;
      Seek(NovMae,0)
  end;
 
  Procedure Cerrar;
  begin
     close(Zona1);
     close(Zona2);
     close(Zona3);
     close(Zona4);
     close(BSAS);
     close(Zona12);
     Erase(Zona12);
     close(Zona34);
     Erase(Zona34);
   end;
 
   Begin {BLOQUE PRINCIPAL}
      Abrir;
      Apareo(Zona1,Zona2,Zona12);
      Apareo(Zona3,Zona4,Zona34);
      Apareo(Zona12,Zona34,BSAS);
     Cerrar;
  end.
 
{De los demás no te revisado nada tu me dirás si quieres algo mas}
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

Problema al Aparear Archivos

Publicado por Damian (2 intervenciones) el 18/09/2012 21:21:40
Pero los Archivos Zona1,2,3, y 4 ya los tengo, no sé porq en la parte de Abrir utilizas un Rewrite.
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

Problema al Aparear Archivos

Publicado por ramon (2158 intervenciones) el 18/09/2012 22:31:58
Pues para poder escribir en el o leer se debe de crear si no mal puedes trabajar con el como
debes de cerrarlo des pues para no perder los datos por daño.
Rewrite abre un archivo para su escritura tu trabajas con registros estos se devén de leer o escribir
de esta forma.

apertura = assign(f,nombre);
comprobación para lectura o escritura y existencia = {$i-} reset(f); {$i+} esto nos permite
crear el archivo o seguir entrando registros en el.
sigue = if ioresult <> 0 then con esta pregunta tenemos la opción de.
Si es mayor o menor de cero entonces lo creamos = rewrite(f) y metemos los datos seek(f,0) a puntamos en la posición cero y guardamos write(zona1)
ya cargados antes y cerramos = close(f).
Si es cero entonces seek(f,filesize(f)) apuntamos a la posición siguiente write(f,zona1) y guardamos close(f) cerramos.
Esta forma es la normal en archivos de registros no la que tu pones que es mas para archivos de texto el apareo que tu quieres lo debes de realizar de esa forma.
Te en cuenta que los archivos tienen que tener datos ya entrados para poder leerlos de lo contrario tendrás error.
Si necesitas mas ayuda dímelo y tratare de ponerte un ejemplo de como yo lo aria.
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