A instrução MOVEA desloca o conteúdo de uma matriz para outra ou inicializa os elementos de uma matriz.
>>-MOVEA--fonte----+-----+--destino----+-----------------+--;-->< '-TO--' '-FOR ocorrência--'
Atributo | Descrição |
---|---|
fonte | Um literal, item de dados (pode ser subscrito, qualificado ou ambos), matriz ou palavra de função especial. O tipo de dados da fonte deve ser compatível com o tipo de dados do destino. |
destino | Uma matriz ou item de dados de uma matriz ou tabela. |
ocorrência | Qualquer literal numérico, item de dados (pode incluir um subscrito, ser qualificado ou ambos), ou palavra de função especial EZE que contenha um número inteiro maior que 0 e menor que 65536. |
A instrução MOVEA simplifica a codificação de um programa por meio da substituição de um loop ou uma série de instruções MOVE nas seguintes ações:
Se a fonte for uma matriz (matriz de campo de variável de mapa, coluna de tabela ou item em um registro com múltiplas ocorrências), a MOVEA desloca a matriz da fonte para a matriz de destino. Se a fonte for um valor literal ou um escalar (item ou campo de valor único), a matriz de destino é inicializada com o escalar. Você pode atribuir uma posição inicial dentro de cada matriz e especificar o número de elementos que você deseja deslocar.
A fonte e o destino podem cada um incluir um subscrito. O subscrito especifica a posição inicial dentro dessa matriz para a operação de deslocamento da matriz. Se você não usar um subscrito, a MOVEA começa pelo primeiro elemento da matriz. O número de ocorrências da posição inicial especificada até o fim da matriz é denominado tamanho resultante. Por exemplo, se a matriz possui 10 elementos e o número 3 foi especificado como o subscrito, o tamanho será 8.
O EZETST contém o subscrito do último elemento alterado no destino.
Para obter considerações sobre a definição do MOVEA, consulte o "Considerações sobre Definição para MOVE".
Suportado em todos os ambientes sem considerações de compatibilidade.
São exemplos da instrução MOVEA:
A fonte é um literal ou um item escalar (não uma matriz). O operando FOR especifica o número de elementos para os quais o valor da fonte é propagado. Se o operando FOR for omitido, o padrão será o tamanho resultante da matriz de destino.
MOVEA source TO target[x] FOR y;
Se y for menor ou igual ao tamanho resultante do destino, essa instrução deslocará o valor da fonte para elementos x através de (x + y - 1). Contudo, se y for maior que o tamanho resultante do destino, ou for omitido, a instrução MOVEA deslocará o valor da fonte para elementos x até o final da matriz. Essa função da instrução MOVEA é ideal para a inicialização de matrizes.
A fonte deve ser o elemento de uma matriz. O operando FOR especifica o número de itens a serem deslocados. Se o operando FOR for omitido, o padrão será o menor tamanho resultante da fonte ou do destino.
MOVEA source[x] TO target[y] FOR z;
Essa instrução desloca o conteúdo da fonte, começando com o elemento x, para o destino, começando com o elemento y, para o mínimo do tamanho resultante da fonte, do tamanho resultante do destino e z.
Por exemplo, suponha que a fonte tivesse 5 elementos, o destino tivesse 10 e a seguinte instrução fosse usada:
MOVEA source TO target [5] FOR 3;
Somente três elementos seriam deslocados, já que esse é o mínimo de 5, 6 e 3. Os três primeiros elementos da fonte são deslocados, por posição, para o quinto, sexto e sétimo elementos do destino.
MOVE 0 to ARRAY2; BEFORE source = 0 ARRAY2 = 1 2 3 4 AFTER source = 0 ARRAY2 = 0 0 0 0 EZETST = 4
Já que uma matriz inteira foi inicializada, o EZETST mantém o tamanho da matriz.
MOVEA 'A' TO ARRAY2[2]; BEFORE source = 'A' ARRAY2 = 1 2 3 4 AFTER source = 'A' ARRAY2 = 1 A A A EZETST = 4
Já que uma ocorrência foi omitida, o padrão é o tamanho resultante (4 - 2 + 1 = 3) da matriz de destino. O EZETST mantém o subscrito do último elemento alterado na matriz de destino.
MOVEA 'ABC' TO ARRAY2; BEFORE source = 'ABC' ARRAY2 = 1 2 3 4 AFTER source = 'ABC' ARRAY2 = ABC ABC ABC ABC EZETST = 4
Uma cadeia de caracteres foi deslocada para dentro de cada elemento da matriz.
MOVEA RESULT TO ARRAY2[2] FOR 3; BEFORE RESULT = 'ABC' ARRAY2 = 1 2 3 4 AFTER RESULT = 'ABC' ARRAY2 = 1 ABC ABC ABC EZETST = 4
Com o uso das opções FOR e subscrito, a fonte foi deslocada para o destino que começa com o segundo elemento no destino e que termina com o quarto elemento.
MOVEA ARRAY1[1] TO ARRAY2[2] FOR 2; BEFORE ARRAY1 = A B C ARRAY2 = 1 2 3 4 AFTER ARRAY1 = A B C ARRAY2 = 1 A B 4 EZETST = 3
Com o uso das opções FOR e subscrito, somente a parte de uma matriz foi alterada. Observe que o primeiro e o último elementos da ARRAY2 não mudaram.
MOVEA ARRAY1 TO ARRAY2; BEFORE ARRAY1 = A B C ARRAY2 = 1 2 AFTER ARRAY1 = A B C ARRAY2 = A B EZETST = 2
Observe que o terceiro elemento da ARRAY1 não foi deslocado.
MOVEA ARRAY1 TO ARRAY2; BEFORE ARRAY1 = A B C ARRAY2 = 1 2 3 4 AFTER ARRAY1 = A B C ARRAY2 = A B C 4 EZETST = 3
Observe que o quarto elemento da ARRAY2 não mudou.
MOVEA ARRAY1[START] TO ARRAY2;
Nesse exemplo, a instrução MOVEA é usada para deslocar uma matriz de uma estrutura de dados para uma matriz de mapa. A ARRAY1 possui 100 elementos e a ARRAY2, que se encontra em um mapa, possui somente 10.
A variável, START, pode então ser modificada para passar pela matriz. Se o mapa for convertido 10 vezes para exibir todas as informações na ARRAY1, START poderia ser definido para 1 na primeira conversão, 11 na segunda conversão, 21 na terceira conversão e assim por diante. A instrução acima move os dados em conjuntos.