Comandos Parte 3

28/04/2019


CASE

Teste condicional

DEF VAR wteste AS INT.

wteste = 1.

CASE wteste:
     WHEN 1 THEN DISP 'teste 1'.
     WHEN 2 THEN DISP 'teste 2'.
     OTHERWISE DISP 'teste 3'.
END.

USE-INDEX

Forçar utilização de um índice ao fazer um FOR EACH ou FIND.

/* exemplo 1 - utilizar num FOR EACH */
FOR EACH customer NO-LOCK
    USE-INDEX CountryPost:
    /* comandos aqui */
END.

/* exemplo 2 - utilizar num FIND */
FIND FIRST customer NO-LOCK
     USE-INDEX CountryPost.

PROCEDURE

Criar procedimento

/* exemplo 1 - apenas definir uma procedure com o menor código possível */
PROCEDURE proc1:
    /* comandos da procedure aqui */
END PROCEDURE.

/* exemplo2 - definir uma procedure e rodar a procedure (RUN) */
PROCEDURE mostrar:
    MESSAGE 'dentro da procedure'.
    PAUSE.
END PROCEDURE.

RUN mostrar. 

RETURN

Retornar resposta de programa ou procedure. Para a execução do programa ou procedure no ponto que foi chamado e retorna o controle para o programa chamador.

/* exemplo 1 - parar a execução de uma procedure */
PROCEDURE mostrar:
    /* comandos aqui - serão executados */

    RETURN.

    /* comandos aqui - não serão executados */
END PROCEDURE.

RUN mostrar.

/* exemplo 2 - usar o comando return para devolver uma mensagem */
PROCEDURE proc2:
    RETURN 'teste mensagem'.
END PROCEDURE.

RUN proc2.
MESSAGE RETURN-VALUE.
PAUSE.

/* exemplo3 - parar a execução do programa p2.p e retornar para p1.p */

/*** programa: p2.p ***/
/* comandos executados */
RETURN.
/* comandos não executados */

/*** programa: p1.p ***/
/* comandos executados */
RUN p2.p.
/* comandos executados */

READKEY

Solicita ao usuário a digitação de uma tecla qualquer.

/* exemplo 1 - menor código possível */
READKEY.

/* exemplo 2 - solicitar uma tecla e mostrar a tecla digitada */
MESSAGE 'Digite uma tecla'.
READKEY.
MESSAGE KEYFUNCTION(LASTKEY).

PAUSE

Pausar programa até usuário pressionar uma tecla. Ou pausa durante x segundos e continua sem ser preciso pressionar teclas.

/* exemplo 1 - pausa o programa e aguarda digitar uma tecla */
PAUSE.

/* exemplo 2 - pausa durante 5 segundos e continua sozinho */
PAUSE 5.

/* exemplo 3 - pausa durante 1200 segundos */
PAUSE 1200.

BUFFER

Definir buffer de uma tabela ou temp-table

/* exemplo 1 - definindo um buffer de uma tabela */
DEF BUFFER bfCustomer FOR customer.

/* exemplo 2 - definindo uma temp-table, e um buffer desta temp-table */
DEF TEMP-TABLE tt_customer LIKE customer.

DEF BUFFER bf_ttcustomer FOR tt_customer.

INPUT FROM

Abrir arquivo e prepara para receber os dados deste arquivo, e não da tela. Usado para importar dados para uma tabela ou variável. Sempre utilizado com o comando IMPORT.

/* exemplo 1 - menor código possível */
INPUT FROM dados.dat.

/* exemplo 2 - abrir um arquivo (três colunas por linha) e importar seus dados */
DEF VAR d1 AS CHAR.
DEF VAR d2 AS INT.
DEF VAR d3 AS DATE.

INPUT FROM arquivo.txt.

REPEAT: /* repete automaticamente até acabarem as linhas do arquivo */
    IMPORT d1 d2 d3. /* importando as três colunas */
    /* fazer algo com as três variáveis lidas (exemplo: salvar numa tabela) */
END.

/* exemplo 3 - importando os dados para a tabela customer */
INPUT FROM d1.txt.

REPEAT:
    CREATE customer.
    IMPORT customer.
END.

OUTPUT TO

Abrir um arquivo e direciona a saída de dados para este arquivo, e não para a tela. Utilizado para exportar dados de tabela ou variáveis. Sempre utilizado com o comando EXPORT. Este comando não altera uma tabela ou variável, apenas copia os dados para o arquivo de saída.

/* exemplo 1 - menor código possível */
OUTPUT TO arquivo.txt.

/* exemplo 2 - exportar todos os dados da tabela customer */
OUTPUT TO dados.dat.

FOR EACH customer NO-LOCK:
    EXPORT customer.
END.

/* exemplo 3 - exportar dado de uma variável */
DEF VAR v1 AS CHAR.

OUTPUT TO dados.txt.
EXPORT v1.

CAN-FIND

Testa se um registro de uma tabela ou temp-table pode ser encontrado. Não traz os dados para o buffer de registro. Retorna apenas TRUE ou FALSE.

/* exemplo 1 - menor código possível */
CAN-FIND(FIRST customer).

/* exemplo 2 - mostrar uma mensagem caso ache um customer */
IF CAN-FIND(customer WHERE customer.custnum = 1000 NO-LOCK)
THEN MESSAGE "Achou customer 1000".

LOOKUP

Testar se string está numa lista

/* exemplo 1 - menor código possível */
LOOKUP('str','it1,item2,outro').

/* exemplo 2 - mostrar mensagem caso não encontre a string na lista */
IF LOOKUP('uva','morango,banana,laranja') = 0
THEN MESSAGE 'Uva não está na lista'.

/* exemplo 3 - mostrar em qual posição da lista a string se encontra, 0 caso não esteja */
MESSAGE LOOKUP('banana','morango,banana,laranja').

NUM-ENTRIES

Retorna o número de entradas de uma lista (utilizando um determinado separador).

/* exemplo 1 - menor código possível */
NUM-ENTRIES("uva#banana#laranja", "#").

/* exemplo 2 - mostrar número de entradas */
MESSAGE NUM-ENTRIES("uva*banana*laranja", "*").

/* exemplo 3 - caso oculte o separador, o progress considera como padrão "vírgula" */
MESSAGE NUM-ENTRIES("uva,banana,laranja").

ENTRY

Selecionar uma entrada de uma lista

/* exemplo 1 - menor código possível */
ENTRY(2,"uva,banana,laranja"). /* ocultando separador, progress considera "vírgula" */

/* exemplo 2 - colocando o valor da entrada 3 numa variável */
DEF VAR fruta AS CHAR.

fruta = ENTRY(3,"uva#banana#laranja", "#").

SUBSTRING

Retorna um trecho de uma string.

/* exemplo 1 - menor código possível */
SUBSTRING('Um Teste De String', 4, 8).

/* exemplo 2 - mostrando os 3 primeiros caracteres de uma string */
MESSAGE SUBSTRING('um texto qualquer', 1, 3).