Pascal/Turbo Pascal - archivos

 
Vista:

archivos

Publicado por lara (8 intervenciones) el 06/06/2006 01:16:07
Hola, yo de nuevo, quería ver si alguien sabe como guardad un registro en un archivo.
se hacia asi: writeln(arch, reg);? porque no me deja..
Como veran no me acuerdo nada de pascal y me estoy volviendo loca...
Mil gracias.
Lara
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

RE:archivos

Publicado por Diego Romero (996 intervenciones) el 07/06/2006 03:53:58
El procedimiento WriteLn() aplicado a archivos solamente sirve para archivos de tipo Text, para archivos con tipo usa Write(Arch, Reg);
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

RE:archivos

Publicado por lara (8 intervenciones) el 07/06/2006 15:22:57
Los archivos secuenciales con tipo se declaran igual que los archivos de texto?, porque en muchos manuales aparece lo mismo. Yo quiero usar un secuenial con tipo:
Algo asi:

type
reg: record;
campo1: integer;
campo2: string[8];
campo3: real;
end
var
archP: file of reg ESTA BIEN DECLARADO PARA UN SECUENCIAL ASI?
begin
append(archP); ESTA BIEN ABRIRLO ASI SI QUIERO AGREGARLE ALGO AL FINAL?
read(archP, reg);
while not eof (archP) do......
begin
reg.campo1:=12;
reg.campo2:=casa;
......{modifico los campos del registro}.
end;
write(archP, reg); ASI ES COMO DECIS QUE SE GUARDA.
end;

No se si los estoy manejando bien y hay muy pocas cosas de archivos secuenciales con tipo...gracias. Lara
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

RE:archivos

Publicado por Diego Romero (996 intervenciones) el 08/06/2006 17:16:38
No. En Pascal no existen archivos secuenciales con tipo, solo los de texto plano son secuenciales, los demás son "random".

La declaración de un archivo de texto es:

var
Arch: Text;
begin
Assign(Arch, 'texto.txt');
Append(Arch); { <- Abre el archivo y situa el puntero al final del archivo }
...
Close(Arch);
end.

La declaración de un archivo con tipo es, por ejemplo:
type
reg: record;
campo1: integer;
campo2: string[8];
campo3: real;
end;

var
Arch: file of reg;
begin
Assign(Arch, 'datos.dat');
Reset(Arch); { <- Abre el archivo si existe (si no existe salta error) y posiciona el puntero al INICIO del archivo }
...
Close(Arch);
end.

Para leer un archivo con tipo se usa Read(), para leer un archivo Text se usa ReadLn().
Para una guía completa te recomiendo la página de Roberto Garcia:
http://mx.geocities.com/antrahxg/pascal/pmf/archivos.html
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

RE:archivos

Publicado por Lara (8 intervenciones) el 10/06/2006 20:36:21
Te hago otra consulta puedo declarar un archivo asi
reg: record
campo1: real;
campo2: integer;
campo3: string[5];
end;
var
archivo: file of reg;
begin
assign(path......); HAY ALGUNA MANERA DE NO TENER QUE ESCRIBIR EL PATH?, PORQUE SI LO CAMBIO DE MÁQUINA NO COMPILA?
reset(archivo);
while not eof(arch) do MI PROFESOR DIJO QUE LO MANEJE ASI PRIMERO ME FIJO SI NO ES FIN Y DESPUES LO LEO.
read(arch, reg);
OTRA DUDA... PUEDO NO USAR EL SEEK?

Gracias. Saludos.Lara
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

RE:archivos

Publicado por Diego Romero (996 intervenciones) el 11/06/2006 18:30:48
No es necesario poner un path completo, con encerrar el nombre del archivo con comillas simples ya está, pero de esa forma el sistema operativo entiende que ese archivo está en el mismo lugar que el .exe que lo usa (path implícito).
Lo que te dijo tu profesor es correcto, al menos para el caso de una lectura secuencial. Ten en cuenta que hagas lo que hagas dentro del ciclo while, eof() debe ser true en algún momento para poder salir del mismo, y la única forma de lograrlo es llegar al final del archivo.
Sí, en un archivo con tipo puedes usar Seek(). Este procedimiento mueve el puntero del archivo a una posición arbitraria siendo cero la primer posición y Seek(Arch, FileSize(Arch)) la última.
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