El manejo de cadenas de texto es una habilidad fundamental en cualquier lenguaje de programación, y COBOL no es la excepción. A pesar de ser un lenguaje con décadas de historia, COBOL ofrece varias herramientas para trabajar con cadenas de caracteres. En este artículo, exploraremos las funciones esenciales para manipular strings en COBOL, proporcionando ejemplos reales y originales que ilustran su uso en diferentes contextos.
En COBOL, las cadenas de texto son conocidas como "strings" y se representan a través de variables alfanuméricas definidas en la sección DATA DIVISION
. Antes de entrar en detalles sobre las operaciones que puedes realizar con cadenas, es importante comprender cómo se declaran.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MI-CADENA PIC X(10) VALUE "Hola Mundo".
En el ejemplo anterior, MI-CADENA
es una variable alfanumérica de longitud fija de 10 caracteres, inicializada con el valor "Hola Mundo".
En COBOL, la concatenación de cadenas se realiza a través del uso de la declaración STRING
.
01 STRING-1 PIC X(5) VALUE 'Hola'.
01 STRING-2 PIC X(10) VALUE ' Mundo'.
01 STRING-RESULTADO PIC X(15).
STRING STRING-1 STRING-2
DELIMITED BY SIZE
INTO STRING-RESULTADO.
En este código, las cadenas STRING-1
y STRING-2
se concatenan y el resultado, "Hola Mundo", se almacena en la variable STRING-RESULTADO
.
Para extraer una subcadena de una cadena más grande, usamos la declaración UNSTRING
.
01 CADENA-ORIGEN PIC X(15) VALUE 'Hola Mundo COBOL'.
01 SUBCADENA PIC X(5).
01 POSICION PIC 99 VALUE 6.
UNSTRING CADENA-ORIGEN DELIMITED BY SPACE
INTO SUBCADENA
WITH POINTER POSICION.
En este ejemplo, SUBCADENA
contendrá "Mundo" después de ejecutar UNSTRING
, ya que extraemos la palabra que comienza en la posición 6 de CADENA-ORIGEN
.
Para comparar cadenas, COBOL utiliza las declaraciones IF
junto con operadores de comparación como =
y >
.
01 CADENA-A PIC X(10) VALUE 'COBOL'.
01 CADENA-B PIC X(10) VALUE 'FORTRAN'.
IF CADENA-A = CADENA-B THEN
DISPLAY 'Las cadenas son iguales.'
ELSE
DISPLAY 'Las cadenas son diferentes.'
END-IF.
Este fragmento mostrará "Las cadenas son diferentes.", ya que CADENA-A
no es igual a CADENA-B
.
La búsqueda de subcadenas dentro de una cadena mayor no está directamente soportada por una instrucción particular en COBOL estándar. Sin embargo, se puede implementar mediante la iteración y comparación de caracteres.
01 CADENA-GRANDE PIC X(30) VALUE 'Aprendiendo COBOL en 2023'.
01 PALABRA-BUSCADA PIC X(5) VALUE 'COBOL'.
01 IDX PIC 99 VALUE 1.
01 ENCONTRADO PIC X VALUE 'N'.
PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > LENGTH OF CADENA-GRANDE - LENGTH OF PALABRA-BUSCADA
IF CADENA-GRANDE (IDX: LENGTH OF PALABRA-BUSCADA) = PALABRA-BUSCADA THEN
MOVE 'Y' TO ENCONTRADO
DISPLAY 'Palabra encontrada en posición ' IDX
EXIT PERFORM
END-IF
END-PERFORM.
IF ENCONTRADO = 'N' THEN
DISPLAY 'Palabra no encontrada.'
END-IF.
En este código, se busca la palabra "COBOL" dentro de la cadena CADENA-GRANDE
. Si se encuentra, se muestra la posición de inicio y se establece la variable ENCONTRADO
a 'Y'.
COBOL no proporciona instrucciones incorporadas para cambiar entre mayúsculas y minúsculas. Sin embargo, se pueden usar rutinas o funciones del sistema para lograr este comportamiento, dependiendo del sistema o compilador específico.
IDENTIFICATION DIVISION.
PROGRAM-ID. CASE-CONVERTER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CADENA PIC X(20) VALUE 'Cobol es Genial'.
01 MAYUSCULAS PIC X(20).
01 MINUSCULAS PIC X(20).
PROCEDURE DIVISION.
CALL 'CONVERTIR-A-MAYUSCULAS' USING CADENA MAYUSCULAS.
CALL 'CONVERTIR-A-MINUSCULAS' USING CADENA MINUSCULAS.
DISPLAY 'Original: ' CADENA.
DISPLAY 'Mayúsculas: ' MAYUSCULAS.
DISPLAY 'Minúsculas: ' MINUSCULAS.
STOP RUN.
En este código hipotético, se asume que existen rutinas externas (CONVERTIR-A-MAYUSCULAS
y CONVERTIR-A-MINUSCULAS
) a las cuales se les pasa la cadena original y una variable para recibir la cadena convertida.
Aunque COBOL no tiene la riqueza de funciones para manejar cadenas que se encuentran en lenguajes modernos, su conjunto de herramientas permite realizar las operaciones más comunes de forma efectiva. Con práctica y creatividad, se pueden implementar algoritmos más complejos para satisfacer las necesidades específicas de manipulación de cadenas en tus programas COBOL.
Para más información sobre COBOL y sus capacidades, puedes consultar la documentación oficial de IBM COBOL, que ofrece una guía completa y detallada sobre el lenguaje.