Manejo de archivos en LISP

LISP es un acrónimo de procesamiento de listas, es uno de los lenguajes de programación más antiguos que se utilizan actualmente en el campo de la inteligencia artificial. Realiza sus cálculos en expresiones simbólicas, lo que lo hace demasiado confiable para la IA.

El manejo de archivos es un método por el cual podemos acceder a archivos y almacenar datos en ellos después de ejecutar operaciones de entrada y salida para futuras referencias ya que los datos no se pierden. 

En este artículo, aprenderemos los conceptos básicos de la manipulación de archivos con LISP.

1. Abriendo un archivo en LISP:

  La tarea más básica es leer el contenido de un archivo. En LISP tenemos la función ABRIR con la que podemos abrir un archivo existente o crear un nuevo archivo.

  Sintaxis:

   abrir nombre de archivo & clave: dirección: tipo de elemento: si existe: si no existe: formato externo

 En la sintaxis anterior, tenemos varios argumentos de palabras clave. Debemos tener en cuenta que los argumentos de palabras clave son útiles para definir el tipo de flujo y las diferentes formas de manejo de errores.

Parámetros:

  •  Dirección: define qué flujo debe manejar la entrada (predeterminado), :salida, :io (tanto la entrada como la salida), :probe (verifica la existencia del archivo)
  •  Tipo de elemento : tipo de elemento en la secuencia.
  •  If-exists : se utiliza para comprobar las condiciones. Formato que puede tomar.
:error - for error signaling.
:rename - for renaming an existing file.
nil - indicates failure.
:rename-and-delete -first rename an existing file then delete it.
:append - Appending to an existing file.
  •  if-does-not-exist: Se activa cuando el archivo que se va a abrir no existe. Formato que puede tomar:
: error - for error signaling.
: create - creates an empty file with the name specified for further use.
nil - indicates failure.
  •   formato externo: especifica el esquema para la representación de caracteres en los archivos.

 Sintaxis:

(abrir «helloworld.file» :dirección :salida :si-existe :agregar :si-no-existe :crear)

Después de la ejecución del comando anterior, se abre un archivo o se crea uno nuevo si no existe.

2. Leer y escribir en un archivo en LISP:

 Con la ayuda de la macro CON-ABRIR-ARCHIVO, se puede abrir un archivo tanto para lectura como para escritura con el cierre automático del archivo.

  Sintaxis:

 with-open-file (nombre de archivo de flujo {opciones}*) {declaración}* {formulario}*

  •   filename: se refiere al nombre del archivo que se va a abrir.
  •   opciones: argumentos de palabras clave.

Ejemplo 1: 

Lisp

(write-line "Hello World")
; Writing to a file
  
(with-open-file (file "helloworld.txt" :direction :output 
:if-exists :supersede
:if-does-not-exist :create)
  
; Here :supersede supersedes (replaces) the preexisting file and
; the :direction :output ensures that the file is
; opened for the writing purpose.
  
(dolist (line '("Banana" "Guava" "Apple" "Cherry" "Mango" 
                         "Strawberry" "Pineapple" "Avocado"  
))
  
(write-line line file)))
  
; Since with open file is used so file is closed automatically
; Reading from a file
  
(let ((in (open "helloworld.txt" :if-does-not-exist nil)))
  
; :if does not exist set to null means there's 
; no file to read from so indicate failure
       
(when in
  
(loop for line = (read-line in nil)
  
while line do (format t "~a~%" line))
  
(close in)
)
)
;  stream" in"  is closed with close command at last

  Producción: 

 

  3. Cerrar un archivo en LISP:

El cierre de un archivo en LISP se realiza usando CLOSE, que cierra una secuencia; al cerrar una secuencia, se asegura que la secuencia no se usará para ninguna operación de entrada o salida. Toda la asociación entre flujo y archivo finaliza con el comando CERRAR.

Nota: No es necesario cerrar un archivo con CLOSE con la macro WITH_OPEN_FILE, ya que se cierra automáticamente.

 

Ejemplo 2:

Lisp

;Writing to a file
  
(let ((file (open "helloworld.txt" :direction :output
:if-exists :supersede
:if-does-not-exist :create)))
  
(dolist (line '("computer network" "DSA" "Data Mining"
  
"C++" "C#" "MATLAB"))
  
(write-line line file))
(close file))
  
;Stream "file" closed with close command at last
; Reading from a file
  
(let ((in (open "helloworld.txt" :if-does-not-exist nil)))
  
(when in
  
(loop for line = (read-line in nil)
  
while line do (format t "~a~%" line))
  
(close in)
)
)
  
; Stream "in" closed with close command at last

 Producción:

 

Publicación traducida automáticamente

Artículo escrito por kishanpandeyrkt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *