UTNianos

Versión completa: Me dan una mano?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Se que me pongo pesado con esto, pero no se que hago mal.

Quiero leer un txt y generar otro con lo que tiene este. (2 oraciones).
El programa genera el archivo pero no copia nada.


begin

assign (fl, 'arch1.txt');
reset (fl);
assign (fx, 'nuevo.txt');
rewrite (fx, 'nuevo.txt');

readln(fl);
writeln(fx);

end;


Todo esta declarado en la seccion var, por esto copio solo el bloque principal. ALguna idea?
Básicamente encuentro un problemín acá:

assign (fx, 'nuevo.txt'); <--- Esto está OK
rewrite (fx, 'nuevo.txt'); <--- Esto NO está OK

Para operaciones sobre archivos como rewrite, reset, erase, el nombre FÍSICO del archivo no lo tenés que usar.
Por qué no? Porque para eso tuviste que hacer un assign primero.

Assign lo que intenta hacer es relacionar el nombre FÍSICO del archivo (es decir, el nombre con el que vos tenés guardado el archivo en tu PC) con un nombre LÓGICO; nombre que vas a usar para tu programa en Pascal Y NADA MÁS (hasta ahí llega su alcance)

En criollo, con assign lo que hacés es: A este archivo 'nuevo.txt' quiero llamarlo FX que DE ACÁ A QUE TERMINE el programa
Entonces, cuando leés un archivo, escribís un archivo, lo reseteás, lo borrás, etc.., no lo llamás por su nombre que tiene en la PC sino por el nombre que vos decidiste ponerle en tu programa Pascal

----

Por otro lado.. eso es un programa o un procedimiento? Porque si es un procedimiento, está bien que lo finalices con un ;
En caso de ser un programa, tenés que finalizarlo con un punto.
Faltará hacer el close del archivo???....close(fl);
(03-07-2012 21:53)gosfede escribió: [ -> ]Faltará hacer el close del archivo???....close(fl);

También. Lo que dije antes, y cerrar el archivo
Y ver qué pasa cuando realice los cambios, porque huelo que algún problema más también tiene eso
cuando lees de un archivo lo guardas en una estructura

read(archivo,registro);
write(otroarchivo,registro);
No precisamente...

Fijate que está trabajando con un .txt plano

Ejemplo de Módulo II:


program curso; { grabar archivo de texto }
var
legajo:longint;
nota1,nota2:byte;
promedio:real;
archout:text; { declaración del identificador que corresponde
al nombre lógico del archivo de texto }
begin
assign(archout,'CURSO.TXT');{relacionar archivo lógico con físico}
rewrite(archout); {abrir archivo para grabar}
writeln('Ingrese legajo, o un número negativo para finalizar');
readln(legajo);
while legajo >=0 do
begin
writeln('Ingrese 2 notas');
readln(nota1,nota2);
promedio:=(nota1+nota2)/2;
writeln(archout,legajo,promedio:5:2); {grabar línea}
writeln('Ingrese legajo, o un numero negativo para finalizar');
readln(legajo);
end;
close(archout) {cerrar archivo}
end.

writeln(archout,legajo,promedio:5:2)

en ningun lado hace readln(archout)


mi punto es que no podes llamar al read y al write solo con el nombre del archivo.
Muchachos, muchachas, muchísimo más que claro. Mil gracias.

Lo último,


cuando hago un

read(archivo, registro);
write(archivo,registro);

Me dice que registro no es una variable en la cual se pueda grabar o leer.


La verdad no sé que hacer.
Qué salame, no era ese el ejemplo que iba a copiar =P

Iba a que en realidad es un archivo de texto plano, y no un archivo de registros.

"Me dice que registro no es una variable en la cual se pueda grabar o leer."

Definiste el registro en el type y en el var?
tenes que definir que registro es una variable asociada al archivo, lamentablemente no tengo codigo de un ejemplo encima
Se lo expliqué acá los otros dias. Puede que el problema esté en eso tambien

http://www.utnianos.com.ar/foro/tema-pascal-tp
Bueno, muchísimas gracias.

Definí en la sección type y una variable de ese tipo.
Pero bueno, ahora funcionó.


Un saludo y no molesto más.
URLs de referencia