Dúvida COBOL - Percorrer STRING

ds_2017

Membro
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?
 
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.
 
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
 
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



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.
 
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?
 
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?


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

Muito obrigado pela ajuda!
Cumprimentos
 
Back
Topo