Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Mayusculas en las primeras palabras


Gatomalo
16 de abril de 2015, 22:56
Nesecito poder hacer una rutina donde ingrese "juan jose del carpio sanchez" y me devuelva
"Juan Jose Del Carpio Sanchez"

Kuk
17 de abril de 2015, 09:01
gatomalo, aqui tienes un codigo COBOL normal y corriente que funcionaria en cualquier compilador:


WORKING-STORAGE SECTION.
01 MI-CAMPO PIC X(100).

PROCEDURE DIVISION.

MOVE 1 TO IDX-1

PERFORM UNTIL IDX-1 > 100
INSPECT MI-CAMPO(IDX-1) CONVERTING
"abcdefghijklmnopqrstuvwxyz" TO
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

PERFORM UNTIL MI-CAMPO(IDX-1) = SPACES OR IDX-1 = 100
ADD 1 TO IDX-1
END-PERFORM

ADD 1 TO IDX-1
END-PERFORM

Josber
17 de abril de 2015, 11:44
Aquí tienes otro, el de Kuk no lo he probado, por lo que no sé si tiene en cuenta el que haya más de 1 espacio entre dos palabras, en éste sí. Como el de Kuk, funciona perfectamente con cualquier COBOL.


WORKING-STORAGE SECTION.
01 TT1.
03 T1 PIC X OCCURS 100.
01 I PIC 999 COMP-3.
01 II PIC 999 COMP-3.
01 III PIC 999 COMP-3.
PROCEDURE DIVISION.

MOVE tu_variable TO TT1.

PERFORM VARYING I FROM 100 BY -1
UNTIL I = 1 OR T1 (I) NOT = SPACES
CONTINUE
END-PERFORM.

MOVE 0 TO II III.

PERFORM VARYING II FROM 1 BY 1 UNTIL II > I OR II = 100
IF T1 (II) = SPACES
COMPUTE III = II + 1
IF T1 (III) NOT = SPACES
INSPECT T1 (III) CONVERTING
"abcdefghijklmnñopqrstuvwxyz" TO
"ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
END-IF
END-IF
END-PERFORM.


Un saludo.-

Kuk
17 de abril de 2015, 13:29
Josber, el mio no lo tiene en cuenta. Habria que meterle otro bucle por medio, y asi lo tiene en cuenta:


WORKING-STORAGE SECTION.
01 MI-CAMPO PIC X(100).

PROCEDURE DIVISION.

MOVE 1 TO IDX-1

PERFORM UNTIL IDX-1 > 100
PERFORM UNTIL MI-CAMPO(IDX-1:1) NOT = SPACES OR IDX-1 > 100
ADD 1 TO IDX-1
END-PERFORM

IF IDX-1 NOT > 100
INSPECT MI-CAMPO(IDX-1:1) CONVERTING
"abcdefghijklmnopqrstuvwxyz" TO
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

PERFORM UNTIL MI-CAMPO(IDX-1:1) = SPACES OR IDX-1 > 100
ADD 1 TO IDX-1
END-PERFORM
END-IF
END-PERFORM

Gatomalo
17 de abril de 2015, 17:45
Josfer
En tu rutina la primera palabra no cambia ingreso "juan jose del carpio sanchez" devuelve
"juan Jose Del Carpio Sanchez" .

Kuk en tu rutina me bota error en ":" must be specified in the reference modifier .":" is assumed

Hrmcobol
17 de abril de 2015, 20:24
Hola GatoMalo, fijate que esto me parece que tambien anda en RM
Saludos

inspect CAMPO replacing all " a" by " A".
inspect CAMPO replacing all " b" by " B".
inspect CAMPO replacing all " c" by " C".
inspect CAMPO replacing all " d" by " D".
inspect CAMPO replacing all " e" by " E".
inspect CAMPO replacing all " f" by " F".


Añadido despues de 37 minutos
El ejemplo anterior no contempla la primer letra, agregar
INSPECT MI-CAMPO(IDX-1) CONVERTING
"abcdefghijklmnopqrstuvwxyz" TO
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Añadido despues de 43 minutos
No le tengo bien la mano a esta nueva manera de comunicarme, le erre en el codigo, reemplazar MI-CAMPO(IDX-1) POR CAMPO (01:01)
Disculpen

Gatomalo
17 de abril de 2015, 21:22
Agregue estos codigo y ya funciona

03 T1 PIC X OCCURS 100.
01 I PIC 999 COMP-3.
01 II PIC 999 COMP-3.
01 III PIC 999 COMP-3.
PROCEDURE DIVISION.

MOVE tu_variable TO TT1.

PERFORM VARYING I FROM 100 BY -1
UNTIL I = 1 OR T1 (I) NOT = SPACES
CONTINUE
END-PERFORM.

MOVE 0 TO II III.

PERFORM VARYING II FROM 1 BY 1 UNTIL II > I OR II = 100
IF T1 (II) = SPACES
COMPUTE III = II + 1
IF T1 (III) NOT = SPACES
INSPECT T1 (III) CONVERTING
"abcdefghijklmnñopqrstuvwxyz" TO
"ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
END-IF
END-IF
END-PERFORM.
INSPECT T1 (1) CONVERTING "abcdefghijklmnñopqrstuvwxyz" TO
"ABCDEFGHIJKLMNÑOPQRSTUVWXYZ".

Kuk
18 de abril de 2015, 00:31
Kuk en tu rutina me bota error en ":" must be specified in the reference modifier .":" is assumed

Ya lo he corregido, se me habia olvidado meter el ":1" ;)