Comandos Parte 4

05/05/2019


INDEX

Retornar posição inicial de uma substring dentro de uma string. Retorna 0 caso não esteja.

/* exemplo 1 - menor código possível */
INDEX('este eh o texto completo','texto').

/* exemplo 2 - mostrar em que posição se encontra uma substring */
DEF VAR v AS CHAR.
v = 'teste de uma frase'.
MESSAGE INDEX(v, 'ma').

/* exemplo 3 - mostrando 0 ao não encontrar */
MESSAGE INDEX('nova frase', 'teste').

Prévia


BEGINS

Retornar se uma string inicia com uma substring. Retorna TRUE ou FALSE.

/* exemplo 1 - menor código possível */
'frase completa' BEGINS 'frase'.

/* exemplo 2 - mostrando se uma string inicial com determinada substring */
MESSAGE 'outra frase' BEGINS 'teste'.

/* exemplo 3 - percorrer os registros que o nome comecem com M e mostrar o nome */
DEF VAR filtro_nome AS CHAR.
filtro_nome = 'm'.
FOR EACH customer WHERE
         customer.name BEGINS filtro_nome:
    MESSAGE customer.name.
END.

Prévia


MATCHES

Retornar se uma string possui substring. Usa-se * para indicar a substring.

/* exemplo 1 - menor código possível */
'frase completa' MATCHES '*om*' .

/* exemplo 2 - mostrar se uma string possui uma substring no final */
MESSAGE 'frase completa' MATCHES '*ta' .

/* exemplo 3 - mostrar se uma string possui uma substring em qualquer posição */
DEF VAR v1 AS CHAR.
v1 = 'frase completa'.
MESSAGE v1 MATCHES '*pl*' .

/* exemplo 4 - percorrer os registros que o nome contenha "seasons" e mostrar o nome */
FOR EACH customer WHERE
         customer.name MATCHES '*seasons*':
    MESSAGE customer.name.
END.

Prévia


BY

Ordenar a leitura dos registros de uma tabela utilizando um campo específico. Por padrão é utilizada a ordem crescente.

/* exemplo 1 - menor código possível */
FOR EACH customer
    BY customer.name:
    /* comandos aqui */
END.

/* exemplo 2 - ler os customer ordenados por nome decrescente e mostrar os nomes */
FOR EACH customer
    BY customer.name DESC:
    
    MESSAGE customer.name.
END.

Prévia


BREAK BY

Fazer a leitura dos registros de uma tabela ordenando por um campo e permitir testar inicio e fim da quebra. Utilizado para fazer subtotais. Utilizado junto com FIRST-OF(), LAST-OF(), FIRST(), LAST().

/* exemplo 1 - menor código possível */
FOR EACH customer
    BREAK BY customer.country:

    /* comandos aqui */
END.

/* exemplo 2 - mostrar total de customer por país */
DEF VAR i AS INT.
FOR EACH customer
    BREAK BY customer.country:

    i = i + 1.
    IF LAST-OF(customer.country)
    THEN DO:
        MESSAGE customer.country i.
        i = 0.
    END.
END.

Prévia


FIRST-OF

Testar inicio da quebra de um BREAK BY.

/* exemplo 1 - menor código possível */
FOR EACH customer
    BREAK BY customer.country:

    MESSAGE FIRST-OF(customer.country).

END.

/* exemplo 2 - mostrar o país apenas no início e os nomes toda vez */
FOR EACH customer
    BREAK BY customer.country:

    IF FIRST-OF(customer.country)
    THEN MESSAGE '================== ' customer.country '=================='.

    MESSAGE customer.name.
END.

Prévia


FIRST

Retornar se é o primeiro registro de um FOR EACH com BREAK BY.

/* exemplo 1 - menor código possível */
FOR EACH customer
    BREAK BY customer.custNum:

    MESSAGE FIRST(customer.custNum).
END.

/* exemplo 2 - mostrar o nome de todos customer, mas uma frase a mais no primeiro */
FOR EACH customer
    BREAK BY customer.custNum:

    IF FIRST(customer.custNum)
    THEN MESSAGE '========== Primeiro ==========' customer.name.
    ELSE MESSAGE customer.name.
END.

Prévia


FORMAT

Formatar uma variável ou campo de tabela. Utiliza-se juntamente com um FRAME. Este comando não altera o valor da variável ou do campo da tabela.

/* exemplo 1 - formatar em 10 caracteres uma string */
DISP 'TESTE DE FORMATO' FORMAT 'X(10)'.

/* exemplo 2 - formatar um decimal */
DISP 56.58266 FORMAT '>>>,>>9.99'.

/* exemplo 3 - formatar os nomes dos customer em 5 caracateres */
FOR EACH customer:
    DISP customer.name FORMAT 'x(5)'.
END.

Prévia


MESSAGE

Mostrar mensagem no rodape (UNIX) ou no log de erros (WEB). Ou mostrar uma mensagem no centro da tela com VIEW-AS.

/* exemplo 1 - menor código possível */
MESSAGE 'Esta eh uma mensagem Progress'.

/* exemplo 2 - mostrar a mensagem no centro da tela (UNIX) */
MESSAGE 'Outra mensagem'
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

Prévia


FUNCTION

Definir uma função.

/* exemplo 1 - menor código possível */
FUNCTION teste RETURNS INT:
    /* comandos aqui */
END FUNCTION.

/* exemplo 2 - definir uma função e chamá-la */
FUNCTION getMensagem RETURNS CHAR (wcodigo AS INT):
    IF wcodigo = 1 THEN RETURN 'Mensagem 1'.
    IF wcodigo = 2 THEN RETURN 'Outra mensagem'.
    
    RETURN 'Mensagem padrao'.
END FUNCTION.

MESSAGE getMensagem(1).
MESSAGE getMensagem(2).
MESSAGE getMensagem(3).

Prévia


MOD

Retornar o resto de uma divisão

MESSAGE 5 MOD 3.

Prévia


KEYFUNCTION

Mostrar qual tecla foi digitada. Utilizado junto com LASTKEY.

READKEY. /* solicitar uma tecla */

MESSAGE KEYFUNCTION(LASTKEY). /* mostrar tecla */

Prévia


KEYLABEL

Mostra nome da tecla. Utilizado junto com LASTKEY.

READKEY. /* ler tecla */

MESSAGE KEYLABEL(LASTKEY). /* mostrar tecla */

Prévia


PROGRAM-NAME

Mostrar nome do programa/procedure/function.

/* exemplo 1 - menor código possível */
MESSAGE PROGRAM-NAME(1).

/* exemplo 2 - mostrar o nome da procedure atual */
PROCEDURE procedureX:
    MESSAGE PROGRAM-NAME(1).
END.

RUN procedureX.

Prévia