Separar Numero de Caracteres

Discussão em 'Progress 4GL' iniciado por DFResmer, Outubro 21, 2011.

  1. jdchaves

    jdchaves Membro Participativo

    se todos seguissem o mesmo padrão, ai ficaria fácil :D


    @x_jeferson
    facebook/jeferson
    EMAIL REMOVIDO! - Motivo: Recebendo Muito Span.
    skype: jeferson.de.chaves
  2. jdchaves

    jdchaves Membro Participativo

    Boa tarde, fiz desta maneira, pego os últimos caracteres do endereço.

    Código:
    DEFINE VARIABLE c-reverse AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE c-numero AS CHAR     NO-UNDO.
    DEFINE VARIABLE c-num AS CHAR     NO-UNDO.
    
    FUNCTION ReverseString RETURN CHAR (INPUT c-reverse AS CHAR).
        DEFINE VARIABLE i-cont AS INTEGER     NO-UNDO.
        DEFINE VARIABLE c-StringInvertida AS CHARACTER   NO-UNDO.
        
        ASSIGN i-cont = LENGTH(c-reverse).
    
        REPEAT:
            IF i-cont <> 0 THEN DO:
                ASSIGN c-StringInvertida = c-StringInvertida + SUBSTRING(c-reverse,i-cont,1).
                ASSIGN i-cont = i-cont - 1.
            END.
            ELSE
                LEAVE.
        END.
    
        RETURN c-StringInvertida.
    
    END FUNCTION.
    
    FUNCTION GetNumber RETURN CHAR (INPUT c-num AS CHAR).
        DEFINE VARIABLE i-cont AS INTEGER     NO-UNDO.
    
        ASSIGN c-num = ReverseString(c-num)
               i-cont = 1.
    
        REPEAT:
            IF substring(c-num,i-cont,1) = " " THEN DO:
                ASSIGN i-cont = i-cont - 1.
                LEAVE.
            END.
            ELSE
                ASSIGN i-cont = i-cont + 1.
        END.
    
        ASSIGN c-num = SUBSTRING(c-num,1,i-cont)
               c-num = ReverseString(c-num).
    
        RETURN c-num.
    
    END FUNCTION.
    
    ASSIGN c-numero = GetNumber("Rua Coronel 1234").
    
    MESSAGE "Numero: " c-numero
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    

    @x_jeferson
    facebook/jeferson
    EMAIL REMOVIDO! - Motivo: Recebendo Muito Span.
    skype: jeferson.de.chaves
  3. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Ficou muito bom, mas mesmo assim eu acho que não resolve o problema de muitos, porque se o endereço for "Rua Coronel 1234 sl 04", a sua função irá retornar apenas o "04"... É como eu disse se não obrigarmos a seguir um padrão nenhuma função será capaz de separar tudo isso.

    Poderiamos tambem reduzir um pouco essa sua função para:

    Código:
    DEF VAR c-numero AS CHAR.
    
    ASSIGN c-numero = "Rua Coronel 1234".
    
    MESSAGE 'Numero: ' ENTRY(NUM-ENTRIES(c-numero," "),c-numero," ")
    VIEW-AS ALERT-BOX.
    
  4. jdchaves

    jdchaves Membro Participativo

    Outro modo é este, no meu caso, tem o campo de complemento, e a sl 5 estaria no campo complemento...

    Código:
    FUNCTION GetNumber RETURN CHAR (INPUT c-num AS CHAR).
        DEFINE VARIABLE i-aux AS INTEGER     NO-UNDO.
        DEFINE VARIABLE i AS INTEGER     NO-UNDO.
        DEFINE VARIABLE c-return AS CHARACTER   NO-UNDO.
    
        DO i = LENGTH(c-num) TO 1 BY -1:
           
            IF c-return <> "" AND INDEX("1234567890",SUBSTRING(c-num,i,1)) = 0 THEN
                LEAVE.
    
            i-aux = INT(SUBSTRING(c-num,i,1)) NO-ERROR.
            IF ERROR-STATUS:ERROR THEN DO:
                c-return = "".
                NEXT.
            END.
            ELSE
                c-return = SUBSTRING(c-num,i,1) + c-return.
        END.
    
        RETURN c-return.
    
    END FUNCTION.
    
    MESSAGE GetNumber("Rua Coronel 45")
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    

    @x_jeferson
    facebook/jeferson
    EMAIL REMOVIDO! - Motivo: Recebendo Muito Span.
    skype: jeferson.de.chaves
  5. jalegria

    jalegria Membro Participativo

    Nunca vai abranger 100% dos casos, mas dá pra maximizar os acertos.
    Não tem como vc pegar o nome da rua pelo CEP e comparando com o nome certo da rua extrair o numero/complemento?
  6. magidigor

    magidigor Membro Participativo

    Boa tarde.

    Encontrei a API no datasul, responsável por fazer a separação no campo endereço de acordo com os parâmetros.

    Segue exemplo de utilização.

    Espero que ajude alguém.

    Arquivos Anexados:

Compartilhe esta Página