Lección 4/8: ARCHIVOS EN SERVIDOR: LAS SENTENCIAS OPEN Y READ
1. TRATAMIENTO DE ARCHIVOS EN EL SERVIDOR
En un ambiente real de trabajo, es comun la utilizacion de un servidor de aplicaciones para trabajar con archivos.
ABAP dispone de una serie de sentencias para el tratamiento de archivos ubicados en el servidor de aplicaciones.
OPEN DATASET: Para la apertura de archivos del servidor
READ DATASET: Realiza la lectura de archivos del servidor.
TRANSEFER: Transfiere datos de archivos al servidor.
DELETE: Borra archivos del servidor.
CLOSE: Cierra archivos del servidor
A continuación cada una de las sentencias explicadas en detalle.
2. APERTURA DE ARCHIVOS EN EL SERVIDOR
Se utiliza la sentencia OPEN DATASET para la apertura de archivos.
La sintaxis de la sentencia es la siguiente:
OPEN DATASET <archivo> FOR <ACCESS> IN <MODE>.
NOTA: Si la apertura del archivo se realizo correctamente, entonces el SY-SUBRC sera 0. Caso contrario sera 8.
El nombre del archivo junto con el directorio en donde se encuentra, pueden ingresarse como un literal entre comillas o en una variable. Si no ingresamos el directorio y solo ingresamos el nombre, entonces el sistema intentará abrir el archivo en el directorio en el que corre el servidor de aplicaciones.
Si se quiere abrir un archivo para lectura, debemos utilizar la cláusula FOR INPUT, tal como vemos a continuación:
OPEN DATASET <archivo> FOR INPUT IN TEXT <MODE>.
NOTA: El archivo que se intenta abrir debe existir. Caso contrario, el SY-SUBRC sera 8. si el archivo existe y esta abierto, el sistema se posicionara al comienzo del sistema.
Ejemplo
* Abrir Fichero para lectura
OPEN DATASET p_path FOR IMPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ELSE.
En el ejemplo anterior, p_path es una parámetro de la pantalla de selección en donde el usuario ingresa el directorio y nombre del archivo.
NOTA: es recomendable cerrar todos los archivos que ya están abiertos antes de realizar una re-apertura con la sentencia OPEN DATASET.
Si queremos abrir un archivo para escritura, debemos utilizar la clausula FOR OUTPUT, tal como vemos a continuación:
OPEN DATASET <archivo> FOR OUTPUT IN TEXT <MODE>.
NOTA:
Si el archivo no existe, se creara automáticamente.
Si existe pero esta cerrado el contenido sera sobre-escrito.
si existe y esta abierto, el sistema se posicionara al comienzo del archivo.
Si la apertura se realiza correctamente, entonces el SY-SUBRC sera 0. Caso contrario. sera 8.
Ejemplo:
* Abrir Fichero para escritura
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ENDIF.
Abrir un archivo para agregar información, debemos utilizar la cláusula FOR APPENDING, tal como vemos a continuación.
OPEN DATASET <archivo> FOR APPENDING IN TEXT <MODE>.
NOTA:
Si el archivo no existe, se cerrara automaticamente.
Si existe pero está cerrado, el sistema lo abrirá y se posicionará al final del mismo.
Si existe y está abierto, el sistema se posicionará al final del archivo.
Siempre el SYSUBRC será 0.
Ejemplo.
* Abrir Fichero para agregar datos
OPEN DATASET p_path FOR APPENDING IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir al archivo
MESSAGE s000(z_prueba) WITH text-004.
ENDIF.
Existen dos modos de apertura de archivos:
MODO TEXTO
Para abrir un archivo en modo texto, debemos utilizar la cláusula IN TEXT MODE, tal como vemos a continuación:
OPEN DATASET <archivo> FOR TEXT MODE ENCODING DEFAULT
NOTA:
Si leemos o escribimos en un archivo que ha sido abierto en modo texto, la informacion es transferida linea a linea.
Si utilizamos el modo texto debemos agregar la palabra reservada ENCODING DEFAULT
Ver ejemplo en el texto guía img 2.9 pag.21
MODO BINARIO
Para abrir un archivo en modo binario, debemos utilizar la cláusula IN BINARY MODE, tal como vemos a continuacion.
Sintaxis:
OPEN DATASET <archivo> for <ACCESS> IN BINARY MODE
Si leemos o escribimos en un archivo que ha sido abierto en modo binario, la informacion es transferida byte a byte
Ver ejemplo en el texto guía img 2.11 pag.22
3. LECTURA DE ARCHIVOS DEL SERVIDOR
Utilizaremos la sentencia READ DATASET para la lectura de archivos del servidor. La sintaxis de la sentencia es la
siguiente:
READ DATASET <archivo> INTO <estructura>
Para determinar en que variable debemos almacenar los datos que leeremos del archivo, debemos conocer la estructura del archivo que leeremos.
Si la lectura se realizó correctamente, entonces el SYSUBRC será 0. Caso contrario, será 8.
Ver ejemplo en el texto guia img 3.2 pag.23