função de procura de texto em variavel.

Discussão em 'Progress 4GL' iniciado por gilsiqueira, Junho 18, 2014.

  1. gilsiqueira

    gilsiqueira Membro Participativo

    preciso de instrrução que procura texto dentro de variavel, assim: procura ("gilmar", no texto c-texto, a partir da posicao x do c-texto, e retorno onde achou -1ra posicao do c-texto.
  2. LeandroSantos

    LeandroSantos Membro Participativo

    Nesse caso você terá que usar duas funções INDEX e SUBSTRING.

    Exemplo: message index(substring("4Each Forum Progress",7,14),"progress") view-as alert-box.
    andcamargo curtiu isso.
  3. Eilleen

    Eilleen Membro Ativo

    Implementei em procedure, mas vc pode colocar numa função tb.. ;)

    DEFINE VARIABLE vTextoAProcurar AS CHARACTER NO-UNDO.
    DEFINE VARIABLE vTextoCompleto AS CHARACTER NO-UNDO.
    DEFINE VARIABLE vPosicaoInicial AS INTEGER NO-UNDO.
    DEFINE VARIABLE vPosicaoEncontrada AS INTEGER NO-UNDO.
    DEFINE VARIABLE vEncontrou AS LOGICAL NO-UNDO.

    UPDATE vTextoAProcurar
    vTextoCompleto
    vPosicaoInicial WITH 2 COL.

    RUN buscaTexto(INPUT vTextoAProcurar, /* texto a ser pesquisado */
    INPUT vTextoCompleto, /* texto completo onde deve ser procurada a vTextoAProcurar */
    INPUT vPosicaoInicial, /* posição onde deve iniciar a busca */
    OUTPUT vPosicaoEncontrada, /* posição inicial onde foi encontrada a vTextoAProcurar */
    OUTPUT vEncontrou). /* retorna se encontrou ou não a vTextoAProcurar */

    DISP vEncontrou vPosicaoEncontrada WITH 2 COL.


    PROCEDURE buscaTexto:
    DEFINE INPUT PARAMETER pTextoAProcurar AS CHARACTER NO-UNDO.
    DEFINE INPUT PARAMETER pTextoCompleto AS CHARACTER NO-UNDO.
    DEFINE INPUT PARAMETER pPosicaoInicial AS INTEGER NO-UNDO.
    DEFINE OUTPUT PARAMETER pPosicaoEncontrada AS INTEGER NO-UNDO.
    DEFINE OUTPUT PARAMETER pEncontrou AS LOGICAL NO-UNDO.

    IF pPosicaoInicial = 0 THEN
    ASSIGN pPosicaoInicial = 1.

    IF SUBSTRING(pTextoCompleto, pPosicaoInicial, -1) MATCHES('*' + pTextoAProcurar + '*') THEN DO:
    ASSIGN pEncontrou = TRUE
    /* posição encontrada na substring, somado à posição inicial - 1
    (se simplesmente procurar no texto todo pode achar algum
    antes da posição inicial e se não somar, acha a posição na
    substring e não no texto todo) */
    pPosicaoEncontrada = INDEX(SUBSTRING(pTextoCompleto, pPosicaoInicial, -1), pTextoAProcurar) + pPosicaoInicial - 1.
    END.


    END PROCEDURE.
  4. gilsiqueira

    gilsiqueira Membro Participativo

    perfeito, isto mesmo que precisava.. muito agradecido

Compartilhe esta Página