[ Foro de Pascal ]

Duda con tema

04-Jan-2013 14:35
Antonio Rodrigues
3 Respuestas

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 ??


04-Jan-2013 20:29
Luis Torres (+18)

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.


04-Jan-2013 21:11
Antonio Rodrigues

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.


06-Jan-2013 11:06
Nacho Cabanes (+84)

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.)