Pascal/Turbo Pascal - Duda ARCHIVO sentencia write y read

   
Vista:

Duda ARCHIVO sentencia write y read

Publicado por federico (5 intervenciones) el 20/02/2013 16:36:35
Mi duda es la siguiente:

si yo tengo:

type
e=record
nombre:string[20];
edad:integer;
dni:string[30];
end;

archivo=file of e;

var:

archivo1:archivo;
archivo2:archivo;
vararchi:e;


begin


si yo quiero archivar todos los de edad igual a 18 por ejemplo en otro archivo:

suponiendo que el archivo con todos los datos ya esta creado(archivo1) y el nuevo que va a archivar solo a los de 18 no (archivo2), (se abre por primera vez):

reset(archivo1);
rewrite(archivo2);

while not eof(archivo1) do
begin

read(archivo1,vararchi); -------------->en este caso abro el prmer registro del archivo
if vararchi.edad = 18 then
write(archivo2,vararchi); ---------->aca mi duda... en este caso, copio la misma informacion que antes en el nuevo archivo?????? si no es asi como lo hago?
end;


osea que por ejemplo si yo hago esto:

while not eof(archivo1) do
begin
read(archivo1,vararchi);
write(archivo2,vararchi);
end;


copio absolutamente todo lo del archivo1 al archivo 2?
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

Duda ARCHIVO sentencia write y read

Publicado por ramon (2072 intervenciones) el 20/02/2013 19:51:08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type
    e=record
       nombre:string[20];
       edad:integer;
       dni:string[30];
    end;
 
archivo=file of e;
 
var:
 n, t : longint;
archivo1:archivo;
archivo2:archivo;
vararchi:e;


la forma de leer o escribir en archivos de registros no se deve
realizar con while not eof(archivo1) do sino con seek(archivo1,n);
donde n es el registro que se lee;

1
2
3
4
5
6
7
8
9
10
11
for n := 0 to filesize(archivo1) - 1 do
 begin
    seek(archivo1,n);
    read(archivo1,vararchi);
    if vararchi.edad = 18 then
    begin
        seek(archivo2,t);
        write(archivo2,vararchi);
        t := t + 1;
    end;
 end;


solo salvara en el nuevo archivo los que contengan una edad de 18,
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

Duda ARCHIVO sentencia write y read

Publicado por federico (5 intervenciones) el 20/02/2013 20:35:58
Eof no marca cuando el archivo llego a su fin? no seria lo mismo que un for? te lo discuto porque en el apunte que tengo de la facu dice claramente eso, y tengo un ejemplo en donde lo hace igual... mi problema no era recorrer el archivo, sino saber como escribir y leer los datos correctos de los mismos, lo cual me lo supiste contestar a la perfección,

que tipo de datos es este? longint;? nunca lo sentí nombrar

parte de eso, porque utilizas el contador ''t'' si en ningun momento hiciste un close en el archivo, por l oque tengo entendido, inmediatamente después de un read o write se corre un lugar la posición automáticamente.. no es asi?
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

Duda ARCHIVO sentencia write y read

Publicado por ramon (2072 intervenciones) el 20/02/2013 21:17:11
for n := 0 to filesize(archivo1) - 1 do
begin
seek(archivo1,n);
read(archivo1,vararchi);
if vararchi.edad = 18 then
begin
seek(archivo2,t);
write(archivo2,vararchi);
t := t + 1;
end;
end;

esto es un simple ejemplo por ello no cerré.
Eof también sirve pero con limitaciones por ejemplo como indicas la posición donde
vas a guardar el registro, no tienes marcador que apunte y el registro no se guardara
correcta mente.
como bien dices marca final de archivo no de registro que es lo que manejas.
El archivo contiene varios registros.
El valor longint es un entero de 4 bytes de pascai
Shortint -128..127 Con signo, 8 bits
Integer -32768..32767 Con signo, 16 bits
Longint -2147483648..2147483647 Con signo, 32 bits
Byte 0..255 Sin signo, 8 bits
Word 0..65535 Sin signo, 16 bits
como puedes apreciar en esto,
El contador t es para indicar la posición que debe de ocupar en el nuevo archivo,
La respuesta de posicionamiento cuando se trabaja con registros no es muy correcta.
Sino intenta añadir mas registros y lo comprobaras.
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

Duda ARCHIVO sentencia write y read

Publicado por federico (5 intervenciones) el 20/02/2013 21:20:30
TOTALMENTE COMPRENDIDO MUCHAS GRACIAS ME AYUDASTE UN MONTON
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