
Ayuda con escritura en archivo.
Publicado por Diego (98 intervenciones) el 04/04/2014 15:57:14
Buen dia, quería que me dieran un poco de ayuda con esto, estoy tratando de escribir un registro en un archivo de registro, pero no puedo realizarlo y me tira un error:
runtime error 100 at 0x00401087
no se a que se deba, puede que luego de ralizar la escritura tire algún otro error, en alguna parte de los case, pero eso es cuestión de arreglarlo en el TAD; Lo que más me interesa es arreglar la la primera parte que realiza la escritura en el archivo. ya que sin eso el resto no sirve de nada..
Les dejo el tad que usé y el programa principal:
TAD:
Programa:
Les agradezco por su tiempo.
runtime error 100 at 0x00401087
no se a que se deba, puede que luego de ralizar la escritura tire algún otro error, en alguna parte de los case, pero eso es cuestión de arreglarlo en el TAD; Lo que más me interesa es arreglar la la primera parte que realiza la escritura en el archivo. ya que sin eso el resto no sirve de nada..
Les dejo el tad que usé y el programa principal:
TAD:
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
unit
tad_archivo_fijo;
interface
type
tpersona = record
dni: integer;
apellido: String[20];
nombres: String[20];
fechaNac: integer;
end;
arch_persona = file of tpersona;
var
ok : boolean;
procedure cargar(var arch: arch_persona; reg : tpersona);
procedure primero(var arch : arch_persona; var reg : tpersona; var ok : boolean);
procedure siguiente(var arch : arch_persona; var reg : tpersona; var ok : boolean);
procedure recuperar(var arch : arch_persona; dni : integer; var reg : tpersona; var ok : boolean);
{ procedure exportar(var arch : arch_persona; var texto : text);}
procedure insertar(var arch : arch_persona; reg : tpersona; var ok : boolean);
procedure eliminar(var arch : arch_persona; dni : integer; var ok : boolean);
procedure modificar(var arch : arch_persona; reg : tpersona; var ok : boolean);
procedure respaldar(var arch : arch_persona; var arch_backup : arch_persona);
implementation
procedure cargar(var arch: arch_persona; reg : tpersona);
var
pos : integer;
begin
pos := filepos(arch);
seek(arch, filesize(arch));
read(arch, reg);
seek(arch, pos);
end;
procedure primero(var arch : arch_persona; var reg : tpersona; var ok : boolean);
var
pos : integer;
begin
if (filesize(arch) = 0) then
ok := false
else
begin
pos := filepos(arch);
reset(arch);
write(arch, reg);
seek(arch, pos);
ok := true;
end;
end;
procedure siguiente(var arch : arch_persona; var reg : tpersona; var ok : boolean);
var
pos : integer;
begin
if ((filesize(arch) = 0) or (filepos(arch) = (filesize(arch)-1))) then
ok := false
else
begin
pos := filepos(arch);
seek(arch, pos + 1);
write(arch, reg);
seek(arch, pos);
ok := true;
end;
end;
procedure recuperar(var arch : arch_persona; dni : integer; var reg : tpersona; var ok : boolean);
var
reg_aux : tpersona;
begin
if (filesize(arch) = 0) then
ok := false
else
begin
primero(arch, reg_aux, ok);
if (ok) then
if (dni = reg_aux.dni) then
reg := reg_aux
else
begin
siguiente(arch, reg_aux, ok);
while ((ok) and (reg_aux.dni <> dni)) do
begin
seek(arch, filepos(arch)+1);
siguiente(arch, reg_aux, ok);
end;
if (ok) then
reg := reg_aux
end
end;
end;
procedure insertar(var arch : arch_persona; reg : tpersona; var ok : boolean);
var
reg_aux : tpersona;
begin
if (filesize(arch) = 0) then
begin
read(arch, reg);
ok := true;
end
else
begin
primero(arch, reg_aux, ok);
if (ok) then
if (reg_aux.dni = reg.dni) then
ok := false
else
begin
siguiente(arch, reg_aux, ok);
while ((ok) and (reg_aux.dni <> reg.dni)) do
begin
seek(arch, filepos(arch)+1);
siguiente(arch, reg_aux, ok);
end;
if (ok = false) then
begin
seek(arch, filepos(arch)+1);
read(arch, reg);
ok := true;
end;
end
end;
end;
procedure eliminar(var arch : arch_persona; dni : integer; var ok : boolean);
var
reg_aux : tpersona;
begin
if (filesize(arch) = 0) then
ok := false
else
begin
primero(arch, reg_aux, ok);
if (ok) then
if (reg_aux.dni = dni) then
begin
reg_aux.dni := -1;
read(arch, reg_aux);
end
else
begin
siguiente(arch, reg_aux, ok);
while ((ok) and (reg_aux.dni <> dni)) do
begin
seek(arch, filepos(arch)+1);
siguiente(arch, reg_aux, ok);
end;
if (ok) then
begin
seek(arch, filepos(arch) + 1);
reg_aux.dni := -1;
read(arch, reg_aux);
end;
end
end;
end;
procedure modificar(var arch : arch_persona; reg : tpersona; var ok : boolean);
var
reg_aux: tpersona;
begin
if (filesize(arch) = 0) then
ok := false
else
begin
primero(arch, reg_aux, ok);
if (ok) then
if (reg_aux.dni = reg.dni) then
begin
read(arch, reg);
end
else
begin
siguiente(arch, reg_aux, ok);
while ((ok) and (reg_aux.dni <> reg.dni)) do
begin
seek(arch, filepos(arch)+1);
siguiente(arch, reg_aux, ok);
end;
if (ok) then
begin
seek(arch, filepos(arch) + 1);
read(arch, reg);
end;
end
end;
end;
procedure respaldar(var arch : arch_persona; var arch_backup : arch_persona);
var
reg : tpersona;
begin
assign(arch_backup, 'respaldo');
rewrite(arch_backup);
reset(arch);
while (not eof(arch)) do
begin
write(arch, reg);
if (reg.dni <> -1) then
read(arch_backup, reg);
end;
close(arch);
close(arch_backup);
end;
end.
Programa:
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
program ejer6;
uses
tad_archivo_fijo;
procedure mostrar(var arch : arch_persona);
var
reg: tpersona;
begin
writeln('----archivo------');
while (not eof(arch)) do
begin
write(arch, reg);
writeln('dni: ', reg.dni:9, 'apellido: ', reg.apellido: 9, 'nombres: ', reg.nombres:9, 'nacimiento ddmmaaaa: ', reg.fechaNac);
end;
writeln('---------xxxxxx-----------');
end;
procedure leer(var reg: tpersona);
begin
with(reg) do
begin
write('Ingrese DNI: ');
readln(dni);
if (dni <> -1) then
begin
write('Ingrese apellido: ');
readln(apellido);
write('Ingrese nombres: ');
readln(nombres);
write('Ingrese fecha de nacimiento: ');
readln(fechaNac);
end;
end;
end;
var
reg : tpersona;
ok : boolean;
arch : arch_persona;
arch_backup : arch_persona;
dni : integer;
opc : integer;
begin
assign(arch, 'personas');
rewrite(arch);
leer(reg);
while (reg.dni <> -1) do
begin
read(arch, reg);
leer(reg);
end;
close(arch);
writeln();
writeln('(1)--cargar--');
writeln('(2)--primero--');
writeln('(3)--siguiente--');
writeln('(4)--recuperar--');
writeln('(5)--insertar--');
writeln('(6)--eliminar--');
writeln('(7)--modificar--');
writeln('(8)--respaldar--');
write('Elija una opción: ');
readln(opc);
reset(arch);
seek(arch, 3);
case opc of
1: begin
write('Ingrese DNI: ');
readln(reg.dni);
write('Ingrese apellido: ');
readln(reg.apellido);
write('Ingrese nombres: ');
readln(reg.nombres);
write('Ingrese fecha de nacimiento: ');
readln(reg.fechaNac);
cargar(arch, reg);
mostrar(arch);
close(arch);
end;
2: begin
primero(arch, reg, ok);
if (ok) then
begin
writeln('---primero------');
writeln('dni: ', reg.dni:9, 'apellido: ', reg.apellido: 9, 'nombres: ', reg.nombres:9, 'nacimiento ddmmaaaa: ', reg.fechaNac);
end
else
writeln('No hay primero');
close(arch);
end;
3: begin
siguiente(arch, reg, ok);
if (ok) then
begin
writeln('---siguiente------');
writeln('dni: ', reg.dni:9, 'apellido: ', reg.apellido: 9, 'nombres: ', reg.nombres:9, 'nacimiento ddmmaaaa: ', reg.fechaNac);
end
else
write('no existe el siguiente');
close(arch);
end;
4: begin
write('Ingrese el dni a recuperar: ');
readln(dni);
recuperar(arch, dni, reg, ok);
if (ok) then
begin
writeln('---recuperado------');
writeln('dni: ', reg.dni:9, 'apellido: ', reg.apellido: 9, 'nombres: ', reg.nombres:9, 'nacimiento ddmmaaaa: ', reg.fechaNac);
end
else
writeln('No existe el dni dentro del archivo');
close(arch);
end;
5: begin
write('Ingrese DNI: ');
readln(reg.dni);
write('Ingrese apellido: ');
readln(reg.apellido);
write('Ingrese nombres: ');
readln(reg.nombres);
write('Ingrese fecha de nacimiento: ');
readln(reg.fechaNac);
insertar(arch, reg, ok);
if (ok) then
mostrar(arch)
else
write('el dni a insertar ya existe');
close(arch);
end;
6: begin
write('Ingrese el dni a recuperar: ');
readln(dni);
eliminar(arch, dni, ok);
if (ok) then
mostrar(arch)
else
write('El dni a eliminar no existe');
close(arch);
end;
7: begin
write('Ingrese DNI: ');
readln(reg.dni);
write('Ingrese apellido: ');
readln(reg.apellido);
write('Ingrese nombres: ');
readln(reg.nombres);
write('Ingrese fecha de nacimiento: ');
readln(reg.fechaNac);
modificar(arch, reg, ok);
if (ok) then
mostrar(arch)
else
write('no se encontró el dni');
close(arch);
end;
8: begin
respaldar(arch, arch_backup);
mostrar(arch_backup);
end;
end;
end.
Les agradezco por su tiempo.
Valora esta pregunta


0