1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida COBOL - Percorrer STRING

Discussão em 'Programação' iniciada por ds_2017, 10 de Agosto de 2018. (Respostas: 5; Visualizações: 424)

  1. Boa noite,

    Tenho uma string com vários valores no seu comprimento, onde pretendo utilizar esses valores para concatenar numa variável auxiliar.

    Por exemplo:

    Tenho a string WS-STRING = 'AAABBBCCCDDDEEEFFF'

    De que forma posso ler até ao fim esta string em Cobol , de modo a conseguir retirar o AAA, BBB, CCC, DDD, EEE e FFF ? Esta string pode variar em termos de comprimento, mas o conteúdo que pretendo retirar é sempre um valor de 3 caracteres (por exemplo AAA). Por cada valor que vai retirando o objetivo é ir concatenando na variável auxiliar, separando cada valor por ';' .


    O resultado final esperado será:

    WS-VARIAVEL-AUX = 'AAA; BBB; CCC; DDD; EEE; FFF.'

    Qual a forma mais eficiente para este tipo de concatenação?
     
  2. Minguno

    Minguno Power Member

    O COBOL não usa o cat como parte da sintaxe se usar procura nas referencias da linguagem a ver quais as tags de sintaxe a combinar com cat string (procura por essas tags na linguagem) . Vais ter de especificar a selecao tipo caracter acho que é isso que precisas mas não sou experto em programação.
     
  3. The Showstopper

    The Showstopper Power Member

    Algo deste genero talvez

    Código:
    Perform Varying ws-ind from 1 by 3
        until ws-string(ws-ind) equal spaces
        String ws_string(ws-ind:3)
                  ';'
         delimited by size into ws-variavel-aux(ws-ind)
    End-Perform
    
    Ficavas com o ';' no fim também
     


  4. The Showstopper, bom dia,

    Antes de mais obrigado pela tua ajuda.
    Sim, tinha idealizado uma solução em que tinha de ter um ciclo, só não sabia como percorrer a string. A variável ws-ind seria declarada com um PIC X(3)?

    A solução final que tenho de apresentar é indicar várias mensagens descritivas. Ou seja, por cada valor retirado da String (AAA, BBB etc), este valor corresponde a um descritivo. Este descritivo está numa tabela Y, e tenho de aceder com o valor AAA na tabela Y, e a tabela Y vai devolver um descritivo correspondente a esse valor, e será esse descritivo que vai ser concatenado na dita variável auxiliar.
    A dúvida que coloquei inicialmente, tentei colocar de forma a que fosse o mais perceptível possível para não confundir muito, porque o objetivo final mesmo será uma concatenação mas com descritivos.



    Com o código que mencionaste ficará algo do género:

    05 WS-STRING PIC X(200)= 'AAABBBCCCDDDEEEFFF'.
    05 WS-IND PIC X(3).


    PERFORM Varying ws-ind from 1 by 3
    until ws-string(ws-ind) equal spaces


    SELECT tabela Y e na condição WHERE fica valor ws-string(ws-ind) e
    obtemos o descritivo que está no campo WS-DESCRITIVO da tabela Y

    String WS-DESCRITIVO
    ';'
    delimited by size into ws-variavel-aux(ws-ind)

    END-PERFORM



    Vamos supor que o valor AAA na Tabela Y corresponde ao descritivo 'cobol', e o valor BBB = 'mainframe' e CCC = 'DB2'

    Depois de ler toda a string WS-STRING e fazer vários acessos por cada valor existente, a variável ws-variavel-aux
    terá de ficar com o seguinte output:

    ws-variavel-aux: 'cobol; mainfraime; DB2'


    Concordas The Showstopper ou achas que pode ser necessário algo mais na concatenação acima? Tenho de garantir que a string é bem percorrida de forma a concatenar bem na variável auxiliar, e garantir que variável auxiliar não perde o descritivo concatenado antes.

    Obrigado.
     
  5. The Showstopper

    The Showstopper Power Member

    Eu declarava o Ws-ind como pic 9(03) Comp-3.

    Vendo assim "no papel" parece-me que essa solução funciona, é uma questão de depois nos testes confirmar se está mesmo a fazer o que tu pretendes

    EDIT: Já agora, se nao te importares de responder, és programador cobol?
     

  6. Quando fizer o teste verifico se passou no ciclo tal como pretendo.
    Sim, cobol e não só.

    Muito obrigado pela ajuda!
    Cumprimentos
     

Partilhar esta Página