COBOL - Comando STRING - www.cadcobol.com.br


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por Carlos Alberto Dornelles - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

STRING
O comando STRING serve para concatenar parcial ou totalmente o conteúdo de dois ou mais itens em um único.
Esse processo chama-se concatenação.

Observações:
  • Cada LITERAL deve ser um literal não-numérico.
  • Cada identifier, exceto o identifier-4 deve ter USAGE DISPLAY, assumida ou explícita.
  • identifier-3 deve ser um item elementar alfanumérico sem caracteres de edição e sem a cláusula JUSTIFIED.
  • É o item resultante da concatenação.
  • (COBOL-85 ou COBOL II) O identifier-3 não pode ser modificado por referencia.
  • Quando identifier-1 e identifier-2 forem itens elementares numéricos, não deverão conter em suas PICTUREs o caracter "P".
  • Cada identifier-1 | literal-1 representa um item a ser concatenado.
  • identifier-2 e literal-2 são delimitadores que, quando forem encontrados em identifier-1 | literal-1, farão com que a transferencia para o identifier-3 seja terminada.
  • A opção SIZE faz com que todo o identifier-1 ou literal-1 seja transferido para o identifier-3.
  • O processo de concatenação.
    1. O conteúdo do identifier-1 ou do literal-1 é transferido para o identifier-3 de acordo com as regras de movimentação entre os campos alfa-numéricos, com a exceção de que não ocorrerá preenchimento com brancos.
    2. Se a frase DELIMITED BY for especificada sem o opção SIZE, o conteúdo do identifier-1 ou literal-1 será transferido para o identifier-3 na sequencia especificada, começando na posição mais à esquerda e continuando até o final do identifier-3 ou até ser encontrado o caracter especificado no identifier-2 | literal-2.
      O conteúdo do 'identifier-2 | literal-2' não é transferido.
    3. Se a frase DELIMITED BY for especificada com a opção SIZE, todo o identifier-1 ou todo o literal-1 será transferido na sequencia especificada, para o identifier-3, até todos os dados serem transferidos ou até o final do identifier-3.

  • Considerações sobre a opção WITH POINTER.
    1. identifier-4 é um contador, cujo valor indica a posição inicial do identifier-3, onde começara a transferencia de dados.
    2. O identifier-4 deve ser um item elementar numérico inteiro, com tamanho suficiente para conter um valor igual ao tamanho do identifier-3 + 1.
      O caracter "P" não pode ser usado na PICTURE.
    3. O vlor do identifier-4, se for especificado, deverá ser maior que zero e será incrementado automaticamente, antes de um caracter ser movido para o identifier-3.
      Se não for especificado, a transferencia será a partir da posição 1 (um) do identifier-3.
    4. Se durante a execução do comando STRING, o valor do identifier-4 for igual a zero ou exceder o comprimento do identifier-3, será acionada a condição de ON OVERFLOW, se esta for especificada, sendo executado o imperative-statement-1.
      A condição NOT ON OVERFLOW será acionada caso a execução do STRING seja bem sucedida.
    5. END-STRING é o delimitador de escopo.


O seu formato geral é:



Primeiro exemplo

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

           05  WS-NOME-01                PIC X(020) VALUE 'Carlos'.
           05  WS-NOME-02                PIC X(020) VALUE 'Alberto'.
           05  WS-NOME-03                PIC X(020) VALUE 'Dornelles'.
           05  WS-NOME-04                PIC X(020) VALUE '- Brasilia'.
           05  WS-NOME-COMPLETO          PIC X(060) VALUE SPACES.

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.
      *-----------------------------------------------------------------

           STRING                                                    
                 WS-NOME-01 DELIMITED BY SPACES ' ' DELIMITED BY SIZE 
                 WS-NOME-02 DELIMITED BY SPACES ' ' DELIMITED BY SIZE 
                 WS-NOME-03 DELIMITED BY SPACES ' ' DELIMITED BY SIZE 
                 WS-NOME-04 DELIMITED BY SPACES                       
           INTO  
                 WS-NOME-COMPLETO                                     
           END-STRING
        
 Resultado: WS-NOME-COMPLETO = Carlos Alberto Dornelles - Brasilia


Segundo exemplo

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

       01  WS-AUXILIARES.
           05  DATE-TEXT                 PIC X(40) VALUE SPACES.
	  
       01  SYS-CORRENTE-DATA.                                           
           05  SYS-COR-SECULO-ANO.                                      
               10  SYS-CORRENTE-SECULO   PIC 9(2) VALUE ZEROES.         
               10  SYS-CORRENTE-ANO      PIC 9(2) VALUE ZEROES.         
           05  SYS-ANO-INTEIRO REDEFINES SYS-COR-SECULO-ANO             
                                         PIC 9(4).                      
           05  SYS-CORRENTE-MES          PIC 9(2) VALUE ZEROES.         
           05  SYS-CORRENTE-DIA          PIC 9(2) VALUE ZEROES.         
           05  SYS-CORRENTE-HORA         PIC 9(2) VALUE ZEROES.         
           05  SYS-CORRENTE-MINUTOS      PIC 9(2) VALUE ZEROES.         
           05  SYS-CORRENTE-SEGUNDO      PIC 9(2) VALUE ZEROES.         
           05  SYS-CORRENTE-SEC          PIC 9(2) VALUE ZEROES.         
           05  SYSTEM-CURRENT-GMT.                                      
               10  SYSTEM-GMT-TIME-DIFFERNTIAL   
                                         PIC X VALUE ZEROES.    
               10  SYSTEM-GMT-HOUR-DIFFERNITAL   
                                         PIC 9(2) VALUE ZEROES. 
               10  SYSTEM-GMT-MINUTE-DIFFERENTIAL                       
                                         PIC 9(2) VALUE ZEROES. 

       01  TAB-NOME-MES.                                        
           05  TAB-NOME-MES              VALUE                                
               "JANEIRO  FEVEREIROMARCO    ABRIL    MAIO     JUNHO    JU
      -        "LHO    AGOSTO   SETEMBRO OUTUBRO  NOVEMBRO DEZEMBRO ".  
               10  NOME-MES              PIC X(009) OCCURS 12 TIMES.  

       01  NOME-DIA-SEMANA.
           05  SEMANA-DIA-NOME           VALUE
               "SEGUNDATERCA  QUARTA QUINTA SEXTA  SABADO DOMINGO".
               10  SEMANA-DIA-NOME       PIC X(007) OCCURS 07 TIMES.     
                
      *-----------------------------------------------------------------
       PROCEDURE DIVISION.
      *-----------------------------------------------------------------

           MOVE FUNCTION CURRENT-DATE TO SYS-CORRENTE-DATA   

           STRING                                                       
              "Brasilia, "                         DELIMITED BY SIZE    
              SYS-CORRENTE-DIA                     DELIMITED BY SIZE    
              " de "                               DELIMITED BY SIZE    
              NOME-MES ( SYS-CORRENTE-MES )        DELIMITED BY SPACES  
              " de "                               DELIMITED BY SIZE    
              SYS-COR-SECULO-ANO                   DELIMITED BY SIZE    
              " - "                                DELIMITED BY SIZE    
              SEMANA-DIA-NOME ( SISTEMA-DIA-DA-SEMANA )                 
                                                   DELIMITED BY SPACES  
              INTO DATE-TEXT                                            
           END-STRING                                                   
			
 Resultado: DATE-TEXT = Brasilia, 05 de outubro de 2006 - QUINTA


Outros exemlos:

Código COBOL Dados e resultados
STRING PRI-NOME DELIMITED BY " " 
       " "      DELIMITED BY SIZE 
       ULT-NOME DELIMITED BY " " 
  INTO NOME-COMPETO
END-STRING
PRI-NOME = CARLOS
ULT-NOME = DORNELLES

Resultado: NOME-COMPETO = CARLOS DORNELLES
STRING CAMPO-1 CAMPO-2 CAMPO-3  
       DELIMITED BY SIZE 
  INTO CAMPO-123
END-STRING
CAMPO-1 = AB*CD
CAMPO-2 = JKL*MN
CAMPO-3 = S*TUV

Resultado: CAMPO-123 = AB*CDJKL*MNS*TUV
STRING CAMPO-1 CAMPO-2 CAMPO-3 
       DELIMITED BY "*" 
  INTO CAMPO-123
END-STRING
CAMPO-1 = AB*CD
CAMPO-2 = JKL*MN
CAMPO-3 = S*TUV

Resultado: CAMPO-123 = ABJKLS
STRING CAMPO-1 CAMPO-2 CAMPO-3 
       DELIMITED BY "*" 
  INTO CAMPO-123 
       POINTER PT1
END-STRING
CAMPO-1 = AB*CD
CAMPO-2 = JKL*MN
CAMPO-3 = S*TUV
PT1 = 3 (antes da execução)

Resultado: CAMPO-123 = ABJKLS
                  PT1 = 9 (depois da execução)
STRING FLDA FLDB FLDX 
       DELIMITED BY WS-DEL 
  INTO FLDABC
END-STRING
 FLDA   = AB&XYZ
 FLDB   = LMN&OP
 FLDC   = ST&V
 WS-DEL = & 
Resultado: FLDABC = ABLMNST