Este tópico descreve uma tarefa de exemplo que altera os caracteres NL (Nova Linha) em uma mensagem de texto para os pares de caracteres CR (Retorno de Carro) e LF (Avanço de Linha).
Essa conversão pode ser útil se as mensagens de uma plataforma EBCDIC (por exemplo, utilizando CCSID 1047) forem enviadas para uma plataforma ASCII (por exemplo, utilizando o CCSID 437). Podem surgir problemas porque o caractere NL EBCDIC hex '15' é convertido no caractere ASCII não definido hex '7F'. Não existe nenhum ponto de código correspondente para o caractere NL na página de código ASCII.
Neste exemplo, é criado um fluxo de mensagens que interpreta a mensagem de entrada como uma mensagem no domínio BLOB. Isto é transmitido para um nó ResetContentDescriptor para redefinir os dados para uma mensagem no domínio MRM. A mensagem é chamada de msg_nl (um conjunto de elementos de cadeia repetitivos delimitados por caracteres EBCDIC NL). Um nó Compute é utilizado para criar uma saída com base em outra mensagem no domínio MRM denominado msg_crlf (um conjunto de elementos de cadeia repetitivos delimitados por pares de CR LF). O domínio da mensagem é alterado novamente para BLOB em outro nó ResetContentDescriptor. Este fluxo de mensagens é ilustrado abaixo.
As seguintes instruções mostram como criar as mensagens e configurar o fluxo de mensagens.
-- Declare local working variables DECLARE I INTEGER 1; DECLARE J INTEGER CARDINALITY(InputRoot.*[]); -- Loop to copy all message headers from input to output message WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I=I+1; END WHILE; -- Set new output message type which uses CRLF delimiter SET OutputRoot.Properties.MessageType = 't_msg_crlf'; -- Loop to copy each instance of string1 child within message body SET I = 1; SET J = CARDINALITY("InputBody"."string1"[]); WHILE I <= J DO SET "OutputRoot"."MRM"."string1"[I] = "InputBody"."string1"[I]; SET I=I+1; END WHILE;
Observe a utilização de uma variável J, inicializada para o valor da cardinalidade dos cabeçalhos existentes na mensagem. Isso é mais eficiente do que calcular a cardinalidade em cada iteração do loop, que ocorre se você codificar a seguinte instrução WHILE:
WHILE I < CARDINALITY(InputRoot.*[]) DO
Conceitos relacionados
Fluxos de Mensagem
ESQL
Modelagem de Mensagens
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL
Referências relacionadas
Suporte ao Idioma Nacional
Nó Compute
Nó MQInput
Nó MQOutput
Nó ResetContentDescriptor
ESQL
Instrução DECLARE
Instrução SET
Instrução WHILE
Mnemônicos TDS
Avisos |
Marcas |
Downloads |
Biblioteca |
Suporte |
Feedback
![]() ![]() |
ac11630_ |