Pascal/Turbo Pascal - Se me cierra el archivo

 
Vista:
Imágen de perfil de Francisco

Se me cierra el archivo

Publicado por Francisco (9 intervenciones) el 08/03/2016 23:46:39
Buenas tardes. Desde ayer que estoy tratando de terminar de correr este programa que es de un examen final. Se trata de un procedure que realiza la carga de datos a un archivo. Cuando ingreso el 'nombre del propietario' lo que trato de hacer es que revise en el archivo para ver si ya habia sido agregado antes, de ser asi, que ingrese la mercaderia traida. Si el 'nombre del propietario' NO se encuentra en el archivo, que se agregue el nombre al registro y que pida posteriormente, la mercaderia. El problema esta cuando el programa comienza a buscar en el archivo para ver si se encuentra el nombre o no. Cuando el programa pasa por ahi, lo cierra sin razon. El error lo tira mientras se esta corriendo el programa, no es un error de codificacion Si alguien sabe el por que, se lo agradecería! :) Dejo el programa codificado en pascal

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
program pescaderia;
uses    crt;
type
        registrobarcos = record
                                nom:         string[40];
                                cod:         char;
                                peso:        integer;
                                total:       real; end;
 
A1 = file of registrobarcos;
 
var
   archi:                   A1;
   reg,reg2:                registrobarcos;
   opc:                     char;
   opt:                     string[10];
   i,j:                     integer;
   nom:                     string[20];
 
procedure cargaarchi;
begin
     repeat
     clrscr;
     writeln('Ingresar nuevo barco? 1.Si /2.No');
     readln(opc);
     until(opc>='1')and(opc<='2');
     while opc='1' do
     begin
          write('Ingrese nombre de propietario: '); { AQUI COMIENZA EL ERROR}
          readln(nom);
          reset(archi);
          repeat
           read(archi,reg)
          until (reg.nom=nom)or(eof(archi)); {Busca el nombre en el registro)}
           if (reg.nom<>nom) then
           begin
                       reg.nom:=nom; {Si no esta, lo agrega}
                       write('Ingrese Codigo de pescado: ');
                       readln(reg.cod);
                       write('Ingrese Kg: ');
                       readln(reg.peso);
                       reg.total:=importe(reg.cod,reg.peso);
                       seek(archi,filepos(archi)-1);
                       write(archi,reg);
                       writeln('agregado');
                       clrscr;
                       writeln('Ingresar nuevo barco? 1.Si /2.No');
                       readln(opc);
          end;
          if (reg.nom=nom) then {Si está, continua con el resto}
          begin
                       write('Ingrese Codigo de pescado: ');
                       readln(reg.cod);
                       write('Ingrese Kg: ');
                       readln(reg.peso);
                       reg.total:=importe(reg.cod,reg.peso);
                       seek(archi,filepos(archi)-1);
                       write(archi,reg);
                       writeln('agregado');
                       clrscr;
                       writeln('Ingresar nuevo barco? 1.Si /2.No');
                       readln(opc);
          end;
     end;
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

Se me cierra el archivo

Publicado por David (224 intervenciones) el 09/03/2016 14:04:23
En el código que has puesto, creo que falta una función, ya que da error en esta línea:

reg.total:=importe(reg.cod,reg.peso);

Míralo y adjunta lo que falte para intentar ayudarte.
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
Imágen de perfil de Francisco

Se me cierra el archivo

Publicado por Francisco (9 intervenciones) el 09/03/2016 14:25:25
Se me paso por alto, adjunto la funcion 'importe' la cual devuelve el precio del pescado segun su codigo y peso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function importe(x:char;y:integer):real;
begin
     if x='D' then
        importe:=4.5*y
        else
            if x='E' then
               importe:=5.5*y
               else
                   if x='F' then
                      importe:=6.5*y
                      else
                          if x='G' then
                             importe:=3.4*y
                             else
                                 if x='H' then
                                    importe:=2.9*y;
end;
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

Se me cierra el archivo

Publicado por David (224 intervenciones) el 09/03/2016 16:11:37
El primer problema que detecto con lo que has puesto es que no tienes asignado el archivo antes de abrirlo. Corrige eso y si te sigue tirando error vuelve a postear. Otra cosa es que tendrís que controlar es si existe o no el arcchivo, ya que si no lo haces e intentas abrirlo sin que exista te seguirá dando error.
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

Se me cierra el archivo

Publicado por ramon (2158 intervenciones) el 09/03/2016 17:11:01
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
{Mira eto}
 
program pescaderia;
uses    crt;
type
   registrobarcos = record
         nom: string[40];
         cod: char;
         peso: integer;
         total: real;
         end;
 
  A1 = file of registrobarcos;
 
  var
   archi:                   A1;
   reg,reg2:                registrobarcos;
   opc:                     char;
   opt:                     string[10];
   i,j:                     integer;
   nom:                     string[40];
 
procedure creaarchivo(re : registrobarcos);
begin
   assign(archi,'cliente.dat');
  {$I-} reset(archi); {$I+}
  if ioresult <> 0 then
  begin
     rewrite(archi);
     seek(archi,0);
     write(archi,re);
  end
  else
    begin
       seek(archi,filesize(archi));
       write(archi,re);
    end;
    close(archi);
end;
 
 
 
 
function importe(x:char;y:integer):real;
begin
     if x='D' then
        importe:=4.5*y
        else
            if x='E' then
               importe:=5.5*y
               else
                   if x='F' then
                      importe:=6.5*y
                      else
                          if x='G' then
                             importe:=3.4*y
                             else
                                 if x='H' then
                                    importe:=2.9*y;
end;
 
procedure entradatos;
begin
   with reg do
   begin
      write('   Entre Nombre              : ');readln(nom);
      write('   Ingrese Codigo de pescado : ');readln(cod);
      write('   Ingrese Kg                : ');readln(peso);
      total:=importe(cod,peso);
   end;
    creaarchivo(reg);
end;
 
procedure cargaarchi;
begin
     assign(archi,'cliente.dat');
  {$I-} reset(archi); {$I+}
  if ioresult <> 0 then
  begin
     writeln('   El Archivo no Existe o esta Da¤ado Pulse Enter');
     readln;
  end
  else
    begin
       close(archi);
     repeat
     clrscr;
     writeln('Ingresar nuevo barco? 1.Si /2.No');
     readln(opc);
     until(opc>='1')and(opc<='2');
     while opc='1' do
     begin
          write('Ingrese nombre de propietario: '); { AQUI COMIENZA EL ERROR}
          readln(nom);
          reset(archi);
          repeat
           read(archi,reg)
          until (reg.nom=nom)or(eof(archi)); {Busca el nombre en el registro)}
           if (reg.nom<>nom) then
           begin
                       reg.nom:=nom; {Si no esta, lo agrega}
                       write('Ingrese Codigo de pescado: ');
                       readln(reg.cod);
                       write('Ingrese Kg: ');
                       readln(reg.peso);
                       reg.total:=importe(reg.cod,reg.peso);
                       creaarchivo(reg);
                       writeln('agregado');
                       clrscr;
                       writeln('Ingresar nuevo barco? 1.Si /2.No');
                       readln(opc);
          end;
          if (reg.nom=nom) then {Si está, continua con el resto}
          begin
                       write('Ingrese Codigo de pescado: ');
                       readln(reg.cod);
                       write('Ingrese Kg: ');
                       readln(reg.peso);
                       reg.total:=importe(reg.cod,reg.peso);
                       creaarchivo(reg);
                       writeln('agregado');
                       clrscr;
                       writeln('Ingresar nuevo barco? 1.Si /2.No');
                       readln(opc);
          end;
     end;
 
   end;
end;
 
 
begin
   entradatos; {creamos el primero}
   clrscr;
   cargaarchi;
 
end.
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