Pascal/Turbo Pascal - Error en archivos

 
Vista:

Error en archivos

Publicado por hito (3 intervenciones) el 25/09/2020 23:17:10
Me dieron una consigna para un tp que dice "Realizar la carga de los síntomas considerando que no serán más de 20. Si ya existen síntomas cargados, exhibirlos y al momento de ingresar un nuevo síntoma verificar que no se repita."
al momento de hacer la búsqueda secuencial para ver si el síntoma ya existe, el programa se cierra.
No sé si está mal hecha la búsqueda secuencial o si olvide algo en esa función, porque cuando saco la función busec, todo anda perfecto :"/

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
program carga_de_sintomas;
uses crt;
type
sint=record
cod_sint:string[3];
desc_sint:string[30];
arsint:file of sint;
var
arsintomas:arsint;
sintoma:sint;
 
 
function archivo:boolean;
begin
     if filesize(arsintomas)<>0 then
     archivo:=true;
end;
 
 
procedure abrirarchivosintomas;
begin
{$l-};
reset(arsintomas);
if IORESULT=2 then
begin
rewrite(arsintomas);
{$l+};
end
else
begin
archivo;
if archivo then
while not EOF(arsintomas) do
begin
read(arsintomas,sintoma);
writeln(sintoma.desc_sint);
end;
writeln('Presione cualquier tecla para continuar');
readkey;
end;
end;
 
function busec(cod_sint:string[3]):boolean;
var
bandera:boolean;
begin
     seek(arsintomas,0);
     bandera:=false;
     repeat
     read(arsintomas,sintoma);
     until (cod_sint=sintoma.cod_sint) or (EOF(arsintomas);
     if (cod_sint=sintoma.cod_sint) then
     begin
     bandera:=true;
     end;
     busec:=bandera;
end;
 
 
procedure carga_sintomas;
var
cod_sint:string[3];
begin
writeln('Carga de sintomas. Escriba "*" para volver al menu');
writeln('Ingrese el codigo del sintoma: ');
readln(cod_sint);
while (cod_sint<>'*') and (filesize(arsintomas)<21) do
begin
     if busec(cod_sint) then
       writeln('El codigo ya existe. Ingrese un codigo valido')
     else
     begin
       sintoma.cod_sint:=cod_sint;
       writeln('Ingrese la descripcion del sintoma');
       readln(sintoma.desc_sint);
       write(arsintomas,sintoma);
       clrscr;
       writeln('Ingrese el codigo del sintoma: ');
       readln(cod_sint);
     end;
end;
end;
 
 
begin
 
abrirarchivosintomas;
if filesize(arsintomas)<21 then
carga_sintomas;
 
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

Error en archivos

Publicado por hito (3 intervenciones) el 26/09/2020 05:23:35
El Assign se encuentra dentro del procedimiento de abrir archivos, olvidé ponerlo
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
sin imagen de perfil
Val: 3
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Error en archivos

Publicado por Eliot (1 intervención) el 11/10/2020 00:27:00
Lo resolviste?
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

Error en archivos

Publicado por hito (3 intervenciones) el 11/10/2020 17:16:29
Si
El error está en la busqueda secuencial, si quiero cargar un sintoma en el archivo y buscar en ese mismo archivo si se repite o no, no puedo usar un EOF
el EOF no se usa para la carga

la funcion para buscar me quedó asi:

1
2
3
4
5
6
7
8
function busec_sint(cod_sint:string[3]):boolean;
begin
     seek(arsintomas,0);
     while (cod_sint<>sintoma.cod_sint) and (filepos(arsintomas)<=filesize(arsintomas)-1) do
       read(arsintomas,sintoma);
     if (cod_sint=sintoma.cod_sint) then
     busec_sint:=true;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar