Código: /*----------------------------------------------------------------------------- Programa : inc_separa_telefone.i Finalidade : Include para formatar telefone Autor : Data : Alterado em: Entrada Saida 7 caracteres 5081300 (0000)0508-1300 8 caracteres 55081300 (0000)5508-1300 9 caracteres 115081300 (0011)0508-1300 10 caracteres 1155081300 (0011)5508-1300 12 caracteres 551155081300 (5511)5508-1300 Outros xxx (0000)0000-0000 -----------------------------------------------------------------------------*/ FUNCTION formata_telefone RETURN CHARACTER (INPUT p_tel AS CHARACTER): DEFINE VARIABLE icont AS INTEGER NO-UNDO. DEFINE VARIABLE tel-aux AS CHARACTER NO-UNDO. DEFINE VARIABLE len AS CHARACTER INITIAL "7,8,10,12" NO-UNDO. /* Filtra somente numeros */ DO icont = 1 to LENGTH( TRIM(p_tel) ): IF INDEX("0123456789",SUBSTRING(TRIM(p_tel),icont,1) ) > 0 THEN ASSIGN tel-aux = tel-aux + SUBSTRING(TRIM(p_tel),icont,1). END. ASSIGN p_tel = tel-aux. /* Retira os zeros a esquerda */ DO WHILE p_tel BEGINS "0": ASSIGN p_tel = SUBSTR(p_tel, 2, LENGTH(p_tel) - 1). END. /* Numeros antigos (11)508-1300 */ IF LENGTH(p_tel) = 9 THEN DO: ASSIGN p_tel = SUBSTR(p_tel, 1, 2) + "0" + SUBSTR(p_tel, 3, 9). END. /* Verifica se o telefone é valido */ IF LOOKUP(STRING(LENGTH(p_tel)),len) = 0 THEN ASSIGN p_tel = "0". /* Preenche com zeros a esquerda */ ASSIGN p_tel = FILL("0",12 - LENGTH(p_tel)) + p_tel. /* Formata telefone */ RETURN STRING(p_tel,"(xxxx)xxxx-xxxx"). END.