Pascal/Turbo Pascal - Archivos - file

 
Vista:

Archivos - file

Publicado por GabY (1 intervención) el 24/11/2006 17:15:29
Necesito una ayuda:
Tengo un procedimiento al cual se le pasa como parametro un archivo:

procedure continuar( var arch: fichero);
.
.
.
Lo que quiero hacer es pasar el archivo sin var (para que no me lo modifique),
pero si lo pongo sin var me da error de compilacion, porque dice que los files deben ir con var.

Alguien sabe algo de esto??
Muchas gracias!!
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 - file

Publicado por Carlos Guimaraenz (265 intervenciones) el 24/11/2006 17:57:16
Hola Gaby! Efectivamente, no puedes pasar un archivo como parámetro por valor.
No entiendo para qué quieres que NO LO MODIFIQUE. No es una variable, que se puede hacer una copia interna en el procedimiento, sino que es un único archivo. Así que si no lo quieres modificar, no lo hagas. Puedes leer de él sin necesidad de modificarlo, si éste es el caso.
No se si sabes, por las dudas te lo explico, que cuando pasas un parámetro por referencia, NO NECESARIAMENTE ES MODIFICADO SIEMPRE. Supongamos una variable de tipo INTEGER, pasada por referencia, y dentro del módulo simplemente lees su valor. No estás modificando su valor.
Si aún te quedan dudas, puedes presentar todo el código y el enunciado.
Un abrazo!
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 - file

Publicado por Diego Romero (996 intervenciones) el 25/11/2006 04:48:56
Ampliando la respuesta de Carlos.

La obligación de pasar por referencia un parámetro de tipo file se debe a que *aunque no lo quieras* el archivo se modifica, aunque no escribas nada de él. Por el solo hecho de hacer una lectura ya estás modificando algo: el puntero de referencia a la posición actual del archivo.

Sea el caso:

type
TFile=file of integer;

...

prodecure Foo(var A:TFile);
var
B: integer;
begin
Read(A,B);
end;

Ese único read modifica la posición del registro actual de lectura y eso es algo que sí o sí debes transmitirlo fuera del procedimiento donde de hace el read.

Si esta no es tu intención, es decir, que por más que hagas un read al archivo no quieres que la posición de lectura se modifique pues nada te impide declarar dos archivos TFile que lean del mismo archivo físico :D.
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