Opção DO

Discussão em 'Progress 4GL' iniciado por DFResmer, Janeiro 20, 2010.

  1. DFResmer

    DFResmer Membro Participativo

    Bom dia pessoal,
    Tenho uma tabela e ela trata 30 colunas de valores, o que eu quero fazer é o seguinte, ler os valores desta linha da tabela, e as que forem maiores que 0 quero que grave como 0, mas hoje tenho que fazer a seguinte pergunta 30 x, queria achar uma forma mais prática e que de menos espaço, fiz alguns teste com a opção DO, mas não consegui, acho que falta alguma coisainha apenas.
    HOJE FAÇO ASSIM:
    IF dec(TEMMOV.col01) > 0 THEN i-col01 = 0.
    IF dec(TEMMOV.col02) > 0 THEN i-col02 = 0.
    IF dec(TEMMOV.col03) > 0 THEN i-col03 = 0.
    IF dec(TEMMOV.col04) > 0 THEN i-col04 = 0.
    IF dec(TEMMOV.col05) > 0 THEN i-col05 = 0.
    IF dec(TEMMOV.col06) > 0 THEN i-col06 = 0.
    IF dec(TEMMOV.col07) > 0 THEN i-col07 = 0.
    IF dec(TEMMOV.col08) > 0 THEN i-col08 = 0.
    IF dec(TEMMOV.col09) > 0 THEN i-col09 = 0.
    IF dec(TEMMOV.col10) > 0 THEN i-col10 = 0.
    IF dec(TEMMOV.col11) > 0 THEN i-col11 = 0.
    IF dec(TEMMOV.col12) > 0 THEN i-col12 = 0.
    IF dec(TEMMOV.col13) > 0 THEN i-col13 = 0.
    IF dec(TEMMOV.col14) > 0 THEN i-col14 = 0.
    IF dec(TEMMOV.col15) > 0 THEN i-col15 = 0.
    IF dec(TEMMOV.col16) > 0 THEN i-col16 = 0.
    IF dec(TEMMOV.col17) > 0 THEN i-col17 = 0.
    IF dec(TEMMOV.col18) > 0 THEN i-col18 = 0.
    IF dec(TEMMOV.col19) > 0 THEN i-col19 = 0.
    IF dec(TEMMOV.col20) > 0 THEN i-col20 = 0.
    IF dec(TEMMOV.col21) > 0 THEN i-col21 = 0.
    IF dec(TEMMOV.col22) > 0 THEN i-col22 = 0.
    IF dec(TEMMOV.col23) > 0 THEN i-col23 = 0.
    IF dec(TEMMOV.col24) > 0 THEN i-col24 = 0.
    IF dec(TEMMOV.col25) > 0 THEN i-col25 = 0.
    IF dec(TEMMOV.col26) > 0 THEN i-col26 = 0.
    IF dec(TEMMOV.col27) > 0 THEN i-col27 = 0.
    IF dec(TEMMOV.col28) > 0 THEN i-col28 = 0.
    IF dec(TEMMOV.col29) > 0 THEN i-col29 = 0.
    IF dec(TEMMOV.col30) > 0 THEN i-col30 = 0.

    GOSTARIA DE UMA OPÇÃO MAIS OU MENOS ASSIM:

    DEF VAR i-ind AS INT FORM '99'.
    DO i-ind = 1 to 30.
    IF dec(TEMMOV.col[i-ind]) > 0 THEN i-col(i-ind) = 0.
    END.

    Mas dá erro de syntax....o q estou fazendo de errado?
    Att,

    Diogo
  2. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Diogo (DFResmer),

    Acho que seu problema esta na definição das variáveis, assim sei que funciona.
    Código:
    DEF TEMP-TABLE TEMMOV NO-UNDO
        FIELD xCOL AS CHAR EXTENT 30.
    
    DEF VAR i-col AS INT EXTENT 30.
    DEF VAR i-ind AS INT FORM '99'.
    
    
    FIND FIRST TEMMOV.
    DO i-ind = 1 to 30.
        IF dec(TEMMOV.xcol[i-ind]) > 0 THEN i-col[i-ind] = 0.
    END. 
    
    Desta forma você utilizando o conceito de array, mas para isto precisa declarar que é um array, usando na declaração da variável a opção EXTENT.

    Obs.: sempre que postar código utilize a opção de CODE.

    []'s
  3. DFResmer

    DFResmer Membro Participativo

    blz, deu certo!!!
    Obrigado, vou reduzir um monte meu programa, não lembrava direito como funcionava este comando.

    Att,

    Diogo

Compartilhe esta Página