Auxílios do VisualAge Generator

Instrução MOVE

A instrução MOVE move os conteúdos de um item para outro item, ou move os itens correspondentes em uma estrutura de dados para outra estrutura de dados.

Qualquer instrução que pode ser escrita como uma instrução MOVE pode também ser escrita como uma instrução de atribuição.

>>-MOVE--fonte----+-----+--destino--;--------------------------><
                  '-TO--'
 

Atributo Descrição
fonte Literal, item de dados (subscrito, qualificado ou ambos), registro, mapa ou certas palavras de função especial. O literal limita-se ao tamanho do destino.
destino Item de dados (subscrito, qualificado ou ambos), registro, mapa ou certas palavras de função especial.

Se a fonte for um literal, um item de dados ou uma palavra de função especial, o destino deve ser um item de dados ou uma palavra de função especial. Se o item de dados tiver um OCCURS maior do que 1 e nenhum subscrito for fornecido, a primeira ocorrência do item de dados é usada. O item de dados pode estar definido em um registro, mapa ou tabela.

Se a fonte for um registro ou um mapa, o destino deve ser um registro ou mapa. O item de dados dentro de um registro ou mapa se move para os itens de dados correspondentes, com o mesmo nome, dentro do registro ou mapa que é o destino.

Considerações sobre Definição para MOVE

Tabela de tipos de itens de dados de origem e destino válidos:

Origem Destino
BIN BIN, #, NUMC, PACF, PACK
CHA CHA, HEX 1, MIX, # 2
DBCS DBCS
HEX CHA, HEX
MIX CHA, MIX
# BIN, CHA 3, #, NUMC, PACF, PACK
NUMC BIN, #, NUMC, PACF, PACK
PACF BIN, #, NUMC, PACF, PACK
PACK BIN, #, NUMC, PACF, PACK

Exceções de Dados Movidos

Geralmente, o conteúdo exato de dados é movido de um item de dados fonte para o item de dados de destino. Há quatro exceções para esse caso:

  1. Um MOVE entre itens de dados #, NUMC, PACK, PACF e BIN resulta na ocorrência de conversões de formato desnecessárias.
  2. Uma instrução MOVE entre itens de dados com comprimentos diferentes resulta no truncamento ou enchimento dependendo do tipo de dados.

    Se o destino for um item CHA ou DBCS, o valor fonte é truncado ou enchido à direita com os brancos necessários.

    Se o destino for um item HEX, a movimentação acontece da esquerda para a direita, truncando ou preenchendo à direita com os bytes de zero binários necessários.

    Se o item de destino for numérico, compactado ou binário, os dados de fonte primeiro são alinhados de forma decimal de modo a corresponderem ao número de casas decimais no destino. A fonte é então movida para o destino com os dígitos em excesso, em cada lado do ponto decimal, truncados. Se houver poucos dígitos em cada lado do ponto decimal, zeros são incluídos.

    Se um item de dados MIX for movido para um item de dados mais longo, o destino é enchido na direita com caracteres em branco de byte único. Se o comprimento do item de destino for menor que o comprimento do item de dados MIX de fonte, os dados de fonte devem ser truncados. Posições não ocupadas no destino que resultam do truncamento de subcadeia DBCS são ocupadas com caracteres em branco de byte único.

  3. Numa movimentação de dados HEX para CHA, o campo HEX é convertido em representação de caractere hexadecimal (0-9, a-f, A-F). Cada byte HEX é convertido para dois bytes de caracteres. A movimentação é feita da esquerda para a direita, truncando ou preenchendo com caracteres zeros como necessário.
  4. Em movimentação de dados CHA para HEX, o campo de caracteres tem que ter apenas os caracteres a-f, A-F e 0-9. Cada par de caracteres do campo de caractere é convertido para o seu byte HEX individual equivalente. A movimentação é feita da esquerda para a direita, truncando ou preenchendo com zeros binários como necessário. A execução é encerrada se o campo CHA tiver caracteres que não são válidos para conversão HEX. Pode-se usar a edição do campo variável hexadecimal para garantir que os dados fornecidos a partir de mapa são válidos para conversão HEX.
  5. Movimentar dados de itens de dados # para itens de dados CHA não faz nenhuma conversão (o que só pode ser feito se o campo numérico não tiver casas decimais). Em outras palavras, o campo numérico é tratado como se ele fosse de caractere. Se você desejar mover o formato de dados NUMC de forma que o sinal de números positivos seja convertido, o byte de baixa ordem que contém o sinal pode ser convertido como a seguir:

    Se o item # ou NUMC tiver valor negativo, o último byte será um caractere inválido.

Mover Correspondente

Dados movidos entre duas estruturas com uma única instrução é chamado de mover correspondente. Estas estruturas podem ser registradas ou mapeadas. Itens de Nível-77 não são considerados parte de uma estrutura de registro e não são incluídos na movimentação. O programa gerado opera como se uma instrução MOVE fora especificada para cada item (ou campo variável de mapa) na estrutura fonte que possui um item (ou variável de mapa) com o mesmo nome na estrutura de destino.

Mover correspondente é útil ao mover dados entre mapas e registros que têm campos de mapa e itens de dados correspondentes. Ao mover registros inteiros é melhor usar uma instrução MOVE entre os dois itens de dados de nível alto dos registros do que executar um mover correspondente. Ambos realizam a mesma coisa, mas o MOVE de item de dados de nível alto executa um MOVE em vez de um MOVE para cada item de dados. Se um item de dados de nível alto for usado, certifique-se de que os itens de dados definidos em ambas as estruturas correspondem-se em comprimento e tipo já que nenhuma conversão será feita.

Da mesma forma, se você estiver movendo parte de seu registro para outro registro, é mais eficiente mover as estruturas de nível mais alto possíveis nos registros.

Ao mover dados de um registro ou tabela para um mapa, você deve se certificar que os dados do registro podem ser exibidos. Se um item de dados de caractere em um registro contiver dados que não podem ser exibidos, ele pode fazer com que erros terminais ocorram quando movido para um mapa. Se existir um campo tanto no registro como no mapa (o campo tem o mesmo nome) e ele é binário ou compactado no registro, ele deve ser numérico no mapa.

Ambientes de Destino para MOVE

Suportado em todos os ambientes sem considerações de compatibilidade.

Exemplos para MOVE

Eis alguns exemplos da instrução MOVE:

Instrução MOVE
MOVE STATE TO DSTAT;

Levando um Espaço em Branco para um Item de Dados

Eis como levar um espaço em branco para um item de dados chamado ITEM1:

MOVE ' ' TO ITEM1;

VisualAge Generator não suporta palavras-chave para a instrução MOVE como são suportadas pelo COBOL, tais como BLANK, BLANKS, ZERO ou ZEROS. Use literais no lugar.

Somente um literal branco é necessário, independente do comprimento do campo.

Levando Zero para um Campo Numérico ou Binário

Eis como preencher um campo numérico ou binário chamado ITEM2 com zeros:

MOVE 0 TO ITEM2;

Somente um 0 é necessário independente do comprimento do campo.

Levando Campos de um Mapa para Outro

Eis como levar todos os campos de nomes idênticos do MAP1 para o MAP2:

MOVE MAP1 TO MAP2;

Levando um Item de Dados para um Elemento de Matriz

Eis como levar o conteúdo de ITEM1 para a segunda ocorrência de ARRAY em REC1:

MOVE ITEM1 TO REC1.ARRAY[2];

Uso de palavras de função especial em uma instrução MOVE

Algumas palavras de função especial podem ser usadas em uma instrução MOVE.

Esta leva uma ID de usuário de programa para um item chamado NAME:

MOVE EZEUSRID TO NAME;

Esta leva uma ID de terminal para um item chamado TERM-ID:

MOVE EZELTERM TO TERM-ID;

Esta leva a data corrente para um item chamado DATE:

MOVE EZEDTE TO DATE;

Esta leva um literal para um campo de mensagem do mapa (EZEMSG):

MOVE "Trata-se de uma mensagem" TO EZEMSG;

Notas de rodapé:

1
Válido apenas se o campo CHA tiver caracteres hexadecimais (a-f, A-F,0-9)

2
Indica se o conteúdo de dados da origem é validado antes da movimentação. Se os conteúdos dos dados for não-numérico, o programa é encerrado anormalmente. A movimentação só é válida se o campo numérico for definido sem posições decimais.

3
A movimentação só é válida se o campo numérico for definido sem casas decimais.


[ Início da Página | Página Anterior | Próxima Página | Índice ]