[ Foro de Pascal ]
program CopiaAutoexec;
var
fichero1, fichero2: text; (* Ficheros de texto *)
linea: string; (* Línea actual *)
begin
assign( fichero1, 'C:\AUTOEXEC.BAT' ); (* Le asignamos nombre *)
assign( fichero2, 'AUTOEXEC.BAN' ); (* y al otro *)
{$I-} (* Sin comprobación E/S *)
reset( fichero1 ); (* Intentamos abrir uno *)
{$I+} (* La habilitamos otra vez *)
if ioResult = 0 then (* Si todo ha ido bien *)
begin
rewrite( fichero2 ); (* Abrimos el otro *)
while not eof( fichero1 ) do (* Mientras que no acabe 1 *)
begin
readln( fichero1, linea ); (* Leemos una línea *)
writeln( fichero2, linea ); (* y la escribimos *)
end;
writeln( 'Ya está '); (* Se acabó: avisamos, *)
close( fichero1 ); (* cerramos uno *)
close( fichero2 ); (* y el otro *)
end (* Final del "if" *)
else
writeln(' No he encontrado el fichero! '); (* Si no existe *)
end.
Esto es lo que esta en el tema Escribir ficheros de texto. Esto sirve para leer un documento de texto, y luego crear una copia.
Resulta que yo tengo que hacer esto en unos de mis ejercicios, pero tengo una duda. En este código de utiliza esto: {$I-} , {$I+} y if ioResult = 0 then . Lo que quiero saber es si hace falta utilizar estas 3 cosas ???
Si hace falta utilizarlas, me pueden explicar un poco mejor que son y para que sirven y como utilizarlas ??
Si no hace falta utilizarlas, me pueden decir otra forma de hacerlo sin ellas ??
Son directivas del compilador, el tema lo puedes ubicar en cualquier libro de Pascal.
Lo que hacen es desactivar las comprobaciones de entrada y salida, pero al quedar desactivadas puedes utilizar una función llamada ioResult que devuelve un valor como resultado de la operación de Entrada/Salida que se hizo, ese valor depende de si el archivo existe y se pudo abrir con éxito (vale cero (0)) o si no existe (valor distinto de cero).
Si no utilizas este mecanismo para abrir un archivo y, el archivo no existe, cuando corras el programa éste saldrá abruptamente; y si lo utilizas sería una forma elegante o amigable de decirle al usuario que el archivo no existe.
Ojo: Puede que el archivo exista y no hayas especificado la ruta correcta en donde se encuentra.
No conozco otra forma de hacerlo, puede que exista, sería cuestión de investigar.
Saludos.
Hm, ok. Ahora que entiendo esto mejor no creo que haga falta otra forma ya que como entiendo esta forma soy capaz de hacerlo.
Gracias.
Efectivamente, es como Luis dice.
Pero sí lo tienes detallado en el curso, justo antes de ese fuente de ejemplo que has mostrado. Copio y pego:
{$I-} deshabilita la comprobación de las operaciones de entrada y salida, {$I+} la vuelve a habilitar, y "ioresult" devuelve un número que indica si la última operación de entrada/salida ha sido correcta (cero) o no (otro número, que indica el tipo de error).
Lo tienes en:
http://www.aprendeaprogramar.com/mod/resource/view.php?id=223
(Es un apartado que está así desde 2006... lo que me recuerda que debería ampliarlo y añadir algún ejercicio propuesto... ;-D )
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)