• No se han encontrado resultados

Puertos de Entrada/Salida por defecto

In document DrRacket - TUTORIALES (página 122-128)

III. Elementos del lenguaje

15.4. Puertos de Entrada/Salida por defecto

Hasta ahora, se han utilizado las funciones display, printf, write, read-char, read-line y read para imprimir información en patalla. Estas funciones, utilizan por defecto tres ujos predeterminados:

(current-input-port) devuelve el puerto de entrada estándar. (current-output-port) devuelve el puerto de salida estándar.

(current-error-port) devuelve el puerto de salida estándar de error.

Para cambiar los puertos por defecto, se pueden usar estas mismas funciones con un parámetro puerto:

15.4 Puertos de Entrada/Salida por defecto (current-input-port <p>) cambia el puerto de entrada estándar a <p>.

(current-output-port <p>) cambia el puerto de salida estándar a <p>.

15 Entrada y Salida

Ejercicios de Entrada y Salida

1. Dado como parámetro el nombre de un archivo, elaborar un programa que elimine del archivo todas las letras a.

2. Haga una variante del ejercicio anterior en el que esta vez dado de parámetro el nombre del archivo y dos caracteres, el primer carácter se buscará para ser sustituido por el segundo carácter en todo el archivo.

3. Elaborar una función que reciba de parámetro el nombre de un archivo y que retorne el número de líneas que este archivo tiene. Si el archivo no existe retornar -1.

4. Hacer un programa que dado como parámetro el nombre de un archivo de texto, aplicarle una suerte de encriptamiento, en el que cada carácter en posición par, se almacene en un archivo llamado par.txt y cada carácter en posición impar se alma- cenara en un archivo llamado impar.txt, el archivo original será eliminado quedando sólo los dos archivos resultantes.

5. Haga un programa que desencripte un archivo encriptado con el algoritmo del ejercicio anterior, dados los archivos par.txt e impar.txt.

6. Elaborar una función de encriptamiento en el que dado de parámetro el nombre de un archivo de texto, sumarle a cada carácter en posición par dos caracteres, y a cada carácter en posición impar sumarle tres posiciones. Por ejemplo, si el carácter #\u0040 está en posición par, se deberá sustituir por el carácter #\u0042.

7. Construya la función de desencriptamiento correspondiente al ejercicio anterior. 8. Se ha dejado una tarea en la que se tiene que entregar un informe de 500 palabras,

el profesor tiene que calicar de forma rápida y con exactitud lo que se pidió, por eso necesita, entre otras cosas, un programa que cuente las palabras, y le pidió la ayuda a usted. Así que tiene que elaborar un programa que reciba de parámetro el nombre del archivo a revisar y tiene que mostrar el número de palabras que tiene el archivo. 9. Usando la estructura persona construya una función que ingrese 5 instancias de

persona en un archivo llamado registro.txt, una estructura por línea. Si el archivo no existe retornar un mensaje de error.

10. Construya una función que retorne #t si un archivo llamado información.txt existe y tiene contenido, es decir que no esté vacío, y #f en caso de que no exista o no tenga información alguna.

15 Entrada y Salida

11. Elaborar un programa que reciba de parámetro el nombre de un archivo de texto, dicho archivo debe contener en cada línea una serie de palabras. La primera representa el nombre de un continente y las demás representan nombres de los países de ese continente, se pide leerlos del archivo y mostrarlos en la salida estándar en forma de pares que contengan una cadena con el nombre del continente y un vector de cadenas con los nombre de los países en el archivo. Los vectores deberán estar ordenados alfabéticamente y los pares deberán mostrarse también ordenados por el nombre del continente. Si el archivo no existe retornar un mensaje de error.

12. Elabore un programa que realice la función de buscar una palabra en un archivo de texto. El programa recibirá de parámetro el nombre del archivo, pero pedirá en tiempo de ejecución una palabra a buscar y si la encuentra, mostrará un mensaje indicándolo junto con la la y la columna en la que la encontró. Si no la encontró, mostrará el mensaje correspondiente. Si el archivo no existe mostrará un mensaje de error. 13. Elaborar una función que reciba como primer parámetro el nombre de un archivo

origen.txt y como segundo parámetro el nombre de un archivo destino.txt. La función deberá copiar la última letra del archivo origen.txt en la primer posición del archivo destino.txt, la penúltima letra del archivo origen.txt en la segunda posición del archivo destino.txt y así sucesivamente.

16 Excepciones

En Scheme, cuando sucede un error en tiempo de ejecución, se lanza una excepción. Y a menos que la excepción sea atrapada, se gestionará imprimiendo en la salida estándar de error un mensaje asociado con la excepción y terminando los cálculos.

Por ejemplo:

1 > (/ 100 0)

2 . . /: division by zero 3

4 > ( car 35)

5 . . car : expects argument of type <pair >; given 35 6

7 > ( define p (open -input - string " Esta es la cadena fuente ")) 8 > (read - string 5 p)

9 " Esta "

10 > (close -input - port p) 11 > (read - string 5 p)

12 . . read - string : input port is closed

16.1. Atrapar Excepciones

Para atrapar una excepción, se usa el bloque with-handlers que tiene la sintaxis: (with-handlers ( { [<f-evaluadora> <f-manejadora>] }* ) <exp-cuerpo>+ ) Y funciona de la siguiente manera: Cuando aparece una forma como esta en el curso actual de ejecución, se comienzan a evaluar las expresiones del cuerpo, las <exp-cuerpo>. Si este código lanza alguna excepción, se llama la primera función <f-evaluadora>. Si esta se evalúa a verdadero, se ejecuta la correspondiente <f-manejadora> y su resultado será el resultado del bloque with-handlers. Si <f-evaluadora> se evalúa a falso, se probará con la siguiente <f-evaluadora> si la hay, y así sucesivamente. Si ninguna <f-evaluadora> resulta en verdadero, la excepción será relanzada para que otro bloque with-handlers de nivel superior la atrape (talvez).

Todas las funciones <f-evaluadora> y las <f-manejadora> deben recibir un único parámetro obligatorio que será el valor que represente a la excepción lanzada en el cuerpo. Típicamente será una instancia de alguna estructura derivada de exn:fail (recuérdese la sección13.2). Ejemplo:

16 Excepciones

1 > (with - handlers ([ exn : fail : contract : divide -by - zero ?

2 ( lambda (e) + inf .0) ])

3 (/ 100 0))

4 + inf .0 5

6

7 > (with - handlers ([ exn : fail : contract : divide -by - zero ?

8 ( lambda (e) + inf .0) ])

9 ( car 35) )

10 . . car : expects argument of type <pair >; given 35 11

12

13 > (with - handlers ([ exn : fail : contract : divide -by - zero ?

14 ( lambda (e) + inf .0) ]

15 [ exn : fail ? ( lambda (e) (exn - message e))])

16 ( define p (open -input - string " Esta es la cadena fuente ")) 17 ( display (read - string 5 p))

18 (close -input - port p) 19 (read - string 5 p)

20 )

21

22 Esta "read - string : input port is closed "

In document DrRacket - TUTORIALES (página 122-128)

Documento similar