Beruflich Dokumente
Kultur Dokumente
Sentencia INSPECT
Permite contar, reemplazar o contar y reemplazar ocurrencias de caracteres simples o grupos de caracteres
en un campo de datos.
Formato 1:
CHARACTERS indica que hay que contar todos los caracteres del campo indicado.
Ejemplo:
Después de ejecutarse esta sentencia, el campo CONTA valdrá 10, ya que en CAMPO-A hay 10 dígitos
contando los 0 de relleno por la izquierda.
Ejemplo:
Después de ejecutarse esta sentencia, el campo CONTA valdrá 2, ya que en CAMPO-A la ocurrencia "11"
aparece dos veces. Después de la primera igualdad queda "1/111ABC" que da una segunda igualdad,
quedando "1ABC", donde no hay más repeticiones.
Cuando se da una igualdad, estos caracteres no se pueden volver a utilizar para verificar si se cumple una
segunda igualdad.
LEADING indica que sólo se desean contar las primeras ocurrencias contiguas.
Ejemplo:
Después de ejecutarse esta sentencia, el campo CONTA valdrá 1, yaque al principio de CAMPO-A,
consecutivamente, sólo se da una ocurrencia.
BEFORE INITIAL indica que el recuento se debe interrumpir después de la primera ocurrencia designada por
el identificador que le acompaña.
Ejemplo:
Después de ejecutarse esta sentencia, el campo CONTA valdrá 1, ya que hasta el carácter "/" sólo hay una
ocurrencia "11",
AFTER INITIAL indica que el recuento debe comenzar después de la primera ocurrencia designada por el
identificador que le acompaña.
REPLACING indica que en el campo denominado por el identificador que le acompaña hay que reemplazar
algunos o todos los caracteres por otros especificados en la sentencia INSPECT. Las opciones que se pueden
especificar con REPLACING son las mismas que se han especificado para TALLYING y tienen el mismo
significado, si pensamos que hay que reemplazar en lugar de contar. Aparece una opción más que es FIRST.
Ejemplo:
FIRST indica que sólo se reemplaza la primera ocurrencia del campo denominado por identificador-1.
Ejemplo:
Ejemplo:
CAMPO-A PIC X(20) VALUE "111/1111ABBC"
INSPECT CAMPO-A TALLYING CONTA FOR LEADING "11"
REPLACING FIRST "11" BY "**" AFTER INITIAL "/"
Después de ejecutarse esta sentencia, el campo CONTA valdrá 1 y CAMPO-A valdrá "111/**11ABBC".
Ejemplo:
CONVERTING indica que hay que convertir cada carácter de una cadena de caracteres a los
correspondientes caracteres de otra. Ambas cadenas deben tener la misma longitud.
Ejemplo:
Después de ejecutarse esta sentencia CAMPO-A valdrá "10A/***0/BBC" ya que los caracteres "1" se
convertirán a "*" y las "A" a "/."
Ejemplo:
Para permitir que la respuesta pueda ser introducida indistintamente en mayúsculas o en minúsculas,
convertimos la respuesta dada a mayúsculas y realizamos entonces la comparación.
Sentencia STRING
Esta sentencia permite enlazar (concatenar) el contenido total o parcial de dos o más campos y almacenar el
resultado en un solo campo.
SIZE: Si se especifica esta opción el número de caracteres a mover es como máximo igual al tamaño del
campo receptor.
POINTER: Por medio de identificador-4, se indica la posición en la que va a ser transferido. Por defecto es 1,
este valor se va incrementando automáticamente.
Si identificador-4 es menor que uno o mayor que el tamaño del campo receptor, la transferencia se
interrumpe y se ejecuta sentencia-1 si se ha especificado ON OVERFLOW. En caso contrario, la transferencia
se realiza totalmente y se ejecuta sentencia-2 si se ha especificado NOT ON OVERFLOW.
Ejemplo:
Resultado:
Ejemplo:
STRING FECHA "correspondiente al año" SPACE ANNO
DELIMITED BY "1" INTO CAMPO-A.
Resultado:
Ejemplo:
Resultado:
Ejemplo:
Resultado:
Sentencia UNSTRING
UNSTRING identificador-1
INTO {identificador-4
[DELIMITER IN identificador-5]
[COUNT IN identificador-6]
}...
identificador-2, literal-1, identificador-3, literal-2: Son campo elementales alfanuméricos que indican por
donde hay que separar la cadena.
Si se utiliza ALL las ocurrencias consecutivas indicadas por estos campos se tratan como si fueran una sola.
Es decir, con ALL "AB", las cadenas "AB", "ABAB", "ABABAB", ... son consideradas como una única ocurrencia
AB.
Si se utilizan dos o más delimitadores hay que hacer uso de la disyuntiva OR.
Ejemplo:
01 CADENA.
TALLYING CAMPOS.
DIA: 15
MES: 01
DELI: / (delimitardor después del MES 01)
ANNO: 1998
La exploración en CADENA comienza en el carácter 11, que corresponde a la primera cifra de DIA.
Si se especifica la opción DELIMITER IN, los caracteres delimitadores son tratados como datos alfanuméricos
elementales y almacenados en los campos referenciados por identificador-5.
Si se especifica la opción ON OVERFLOW y el valor del campo identificador-7 es menor que 1 o mayor que el
tamaño del campo emisor, o bien todos los campos receptores se han activado y aún quedan caracteres por
examinar en el campo emisor, la sentencia-1 se ejecuta. Si no se da una condición de ON OVERFLOW y se ha
especificado la opción NOT ON OVERFLOW, entonces se ejecuta la sentencia-2.
Cobol, permite comparar cadenas de caracteres, para hacer uso de esta característica hay que saber que
una cadena de caracteres es menor que otra si la primera está antes que la otra alfanuméricamente. Hay
que tener presente que las letras mayúsculas son menores que las minúsculas y los dígitos son menores que
las letras.
Un carácter es menor que otro si está antes que él en el juego de caracteres que estemos utilizando.
En una comparación, todos los caracteres ASCII son válidos, esto es, el carácter nulo (ASCII 0), el carácter
blanco (ASCII 32), etc., son caracteres válidos que se deben tener en cuenta.
Ejemplo: Realizar un segmento de programa que partiendo de dos nombres los escriba ordenados
alfabéticamente por apellidos.
01 NOM-AP-1.
END-IF.
DISPLAY NOM-AP-1.
DISPLAY NOM-AP-2.
STOP RUN.
La comparación se realiza por el campo elemental APELLIDO, mientras que la permutación de los nombres
completos se hace utilizando los campos compuestos correspondientes y apoyándonos en un tercer campo
denominado CADENA.