Domingo 19 Mai 2024

A instrução UNSTRING faz com que os dados contíguos em um campo de envio sejam separados e colocados em vários campos de recebimento.

>>-UNSTRING--identifier-1--------------------------------------->

>--+-------------------------------------------------------------------------------------+-->
   '-DELIMITED--+----+--+-----+--+-identifier-2-+--+-----------------------------------+-'   
                '-BY-'  '-ALL-'  '-literal-1----'  | .-------------------------------. |     
                                                   | V                               | |     
                                                   '---OR--+-----+--+-identifier-3-+-+-'     
                                                           '-ALL-'  '-literal-2----'         

>--INTO--------------------------------------------------------->

   .------------------------------------------------------------------------------------.   
   V                                                                                    |   
>----identifier-4--+---------------------------------+--+-----------------------------+-+-->
                   '-DELIMITER--+----+--identifier-5-'  '-COUNT--+----+--identifier-6-'     
                                '-IN-'                           '-IN-'                     

>--+---------------------------------+-------------------------->
   '-+------+--POINTER--identifier-7-'   
     '-WITH-'                            

>--+--------------------------------+--------------------------->
   '-TALLYING--+----+--identifier-8-'   
               '-IN-'                   

>--+------------------------------------------+----------------->
   '-+----+--OVERFLOW--imperative-statement-1-'   
     '-ON-'                                       

>--+-----------------------------------------------+------------>
   '-NOT--+----+--OVERFLOW--imperative-statement-2-'   
          '-ON-'                                       

>--+--------------+--------------------------------------------><
   '-END-UNSTRING-'   

 

identifier-1

Representa o campo de envio. Os dados são transferidos a partir deste campo com os campos de recepção de dados (identifier-4).

identifier-1 deve fazer referência a um item de dados de categoria alfabética, alfanumérico, alfanumérico-editado, DBCS, nacional ou nacional-editado.

 

identifier-2literal-1identifier-3literal-2

Especifica um ou mais delimitadores.

identifier-2 e identifier-3 deve fazer referência a itens de dados da categoria alfabética, alfanumérico, alfanumérico-editado, DBCS, nacional ou nacional-editado.

literal-1 ou literal-2 deve ser de categoria alfanumérico, DBCS, ou nacional e não deve ser uma constante figurativa que começa com a palavra ALL.

 

identifier-4

Especifica um ou mais campos de recepção.

identifier-4 deve fazer referência a um item de dados de categoria alfabética, alfanumérico, numérico, DBCS ou nacional. Se o item de dados referenciado for de categoria numérica, sua cadeia de caracteres de imagem não deve conter o símbolo de imagem P e seu uso deve ser DISPLAY ou NACIONAL.

 

identifier-5

Especifica um campo para receber o delimitador associado com identifier-4.

identifier-5 deve fazer referência a um item de dados de categoria alfabética, alfanumérica, DBCS ou nacional.

 

identifier-6

Especifica um campo para manter a contagem de caracteres que são transferidos para identifier-4.

identifier-6 deve ser um item de dados inteiros definido sem o símbolo P em seu quadro caractere-string.

 

identifier-7

Especifica um campo para manter uma posição de caractere relativa durante o processamento UNSTRING.

identifier-7 deve ser um item de dados inteiros definido sem o símbolo P na cadeia de imagem.

identifier-7 deve ser descrito como um item de dados de tamanho suficiente para conter um valor igual a 1, mais o número de posições de caracteres no item de dados referenciado pelo identifier-1.

 

Identifier-8

Especifica um campo que é incrementado pelo número de campos delimitados processados.

identifier-8 deve ser um item de dados inteiros definido sem o símbolo P em seu quadro character-string.

 

Aplicam-se as seguintes regras:

  • Se identifier-4 faz referência a um item de dados de uso de DISPLAY, identifier-1identifier-2identifier-3, e identifier-5 também deve fazer referência a itens de dados de uso visor e todos os literais devem ser literais alfanuméricos. Qualquer constante figurativa pode ser especificada, exceto NULL ou uma que começa com a palavra ALL. Cada constante figurativa representa um literal alfanumérico de 1-caractere.
  • Se identifier-4 faz referência a um item de dados de uso de DISPLAY-1, identifier-1identifier-2identifier-3, e identifier-5 também deve fazer referência a itens de dados de uso DISPLAY-1 e todas as literais devem ser literais DBCS. SPACE constante figurativo é a única constante figurativa que pode ser especificada. Cada constante figurativa representa um literal DBCS de 1 caractere.
  • Se identifier-4 faz referência a um item de dados de uso NACIONAL, identifier-1, identifier-2identifier-3, e identifier-5 também deve fazer referência a itens de dados de uso nacional e todos os literais devem ser literais nacionais. Qualquer constante figurativa pode ser especificada, exceto NULL ou uma que começa com a palavra ALL. Cada constante figurativa representa um literal nacional de 1-caractere.

Contagem de campos (identifier-6) e campos de ponteiro (identifier-7) são incrementados em número de posições de caracteres (alfanumérico, DBCS ou nacional), e não pelo número de bytes.

Uma instrução UNSTRING pode substituir uma série de instruções MOVE, exceto que a avaliação ou o cálculo de determinados elementos é executado apenas uma vez, no início da execução da instrução UNSTRING.

As regras para MOVE são os mesmos que para uma declaração jogada para um item enviando elementar da categoria de identifier-1, com o apropriado identifier-4 como o item de recepção. Por exemplo, as regras para mover um item de DBCS são utilizados quando identificador-1 é um item DBCS.

 

DELIMITED BY

Esta frase especifica delimitadores dentro dos dados que controlam a transferência de dados.

Cada identifier-2identifier-3literal-1 ou literal-2 representa um delimitador.

Se DELIMITED BY não especificado, o DELIMITED IN e COUNT IN devem não ser especificado.

 

ALL

Múltiplas ocorrências contíguas de quaisquer delimitadores são tratadas como se houvesse apenas uma ocorrência; esta uma ocorrência é movido para o delimitador de campo de recepção (identifier-5), se for especificado. Os caracteres que delimitam no campo de envio são tratados como um item elementar do mesmo uso e a categoria como identifier-1 e são movidos no campo delimitador de recebimento atual de acordo com as regras da declaração MOVE.

Quando DELIMITED BY ALL não especificado, e duas ou mais ocorrências contíguas de qualquer delimitador são encontrados, os dados atuais campo recebendo (identifier-4) é preenchido com zeros ou espaços, de acordo com a descrição dos dados de campo de recepção.

 

Delimitador com dois ou mais caracteres

Um delimitador que contém dois ou mais caracteres é reconhecido como um delimitador somente se os caracteres de delimitação estiverem em ambos os casos a seguir:

  • Contíguo
  • Na seqüência especificada no campo de envio

 

Dois ou mais delimitadores

Quando dois ou mais delimitadores são especificados, uma condição OR existe e cada ocorrência não-sobreposta de qualquer um dos delimitadores é reconhecida no campo de envio na seqüência especificada.

Por exemplo:

DELIMITED BY "AB" or "BC"

Uma ocorrência de AB ou BC no campo de envio é considerado um delimitador. Uma ocorrência de ABC é considerada uma ocorrência de AB.

 

INTO

Esta frase especifica os campos onde os dados devem ser movidos.

identifier-4 representa os dados recebendo campos.

 

DELIMITER IN

Esta frase especifica os campos onde os delimitadores devem ser movidos.

identifier-5 representa os campos delimitador de recepção.

O DELIMITER deve não ser especificado se DELIMITED BY não especificado.

 

COUNT IN

Esta frase especifica o campo onde a contagem de posições de caracteres examinadas é mantida.

identifier-6 é o campo de contagem de dados para cada transferência de dados. Cada campo contém a contagem de posições de caracteres examinadas no campo de envio, terminadas pelos delimitadores ou no fim do campo de envio, para a mudança para este campo de recebimento. Os delimitadores não estão incluídos nesta contagem.

O COUNT IN frase deve não ser especificado se DELIMITED BY não especificado.

 

POINTER

Quando POINTER é especificado, o valor do campo indicador, identifier-7, comporta-se como se fosse aumentado por um para cada posição de carácter examinados no campo de envio. Quando a execução da instrução UNSTRING é concluída, o campo de ponteiro contém um valor igual ao seu valor inicial mais o número de posições de caracteres examinadas no campo de envio.

Quando essa frase é especificada, o usuário deve inicializar o campo de ponteiro antes da execução da instrução UNSTRING começar.

 

TALLYING IN

Quando TALLYING IN for especificado, o campo de contagem de área, identifier-8, contém (no final da execução da instrução UNSTRING) um valor igual ao valor inicial mais o número de recepção de dados áreas postas em prática.

Quando essa frase é especificada, o usuário deve inicializar o campo de contagem de área antes da execução da instrução UNSTRING começar.

 

ON OVERFLOW

Uma condição de estouro ocorre quando:

  • O valor do ponteiro (explícito ou implícito) é menor que 1.
  • O valor do ponteiro (explícito ou implícito) excede um valor igual ao comprimento do campo de envio.
  • Todos os campos de recepção de dados foram agidos e o campo de envio ainda contém posições de caracteres não examinadas.

Quando ocorre uma condição de estouro

Uma condição de estouro causa as seguintes ações:

  1. Não mais dados são transferidos.
  2. A operação UNSTRING é encerrada.
  3. A frase NOT ON OVERFLOW, se especificada, é ignorada.
  4. O controlo é transferido para o fim da instrução UNSTRING ou, se ON OVERFLOW está especificado, para imperative-statement-1.

 

imperative-statement-1

Declaração ou declarações para lidar com uma condição de estouro.

Se o controle é transferido para imperative-statement-1, a execução continua de acordo com as regras de cada instrução especificada no imperative-statement-1. Se um procedimento ramificação ou declaração condicional que faz com que a transferência explícita de controle é executado, controle é transferido de acordo com as regras para essa declaração. Caso contrário, depois de concluída a execução dos imperative-statement-1, o controlo é transferido para o fim da instrução UNSTRING.

 

Quando uma condição de estouro não ocorre

Quando, durante a execução de uma instrução UNSTRING, as condições que causam uma condição de estouro não são encontradas, então:

  1. A transferência de dados está concluída.
  2. A frase ON OVERFLOW, se especificada, é ignorada.
  3. O controlo é transferido para o fim da instrução desencordoar ou, se NOT ON OVERFLOW for especificado, a imperative-statement-2.

 

imperative-statement-2

Declaração ou instruções para lidar com uma condição de estouro que não ocorre.

Se o controle é transferido para imperative-statement-2, a execução continua de acordo com as regras de cada instrução especificada no imperative-statement-2. Se um procedimento ramificação ou declaração condicional que faz com que a transferência explícita de controle é executado, controle é transferido de acordo com as regras para essa declaração. Caso contrário, depois de concluída a execução dos imperative-statement-2, o controlo é transferido para o fim da instrução UNSTRING.

 

END-UNSTRING

Este terminador de escopo explícito serve para delimitar o escopo da instrução UNSTRING. END-UNSTRING permite que uma instrução condicional UNSTRING seja aninhada em outra instrução condicional. END-UNSTRING também pode ser usado com uma instrução UNSTRING imperativa.