[UDF] RegExp - Extraction des adresses Mail d'un fichier.

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

[UDF] RegExp - Extraction des adresses Mail d'un fichier.

#1

Message par Tlem »

Voici un script qui vous permettra d'extraire les adresses Mail d'un fichier quelconque en éliminant les doublons possible.

J'ai trouvé le pattern de l'expression régulière sur le forum Anglais, ainsi que la fonction _ArrayUnique que j'ai recopié tel quel.
Vous constaterez aussi qu'il n'y à aucun Include. 8)

Pour faire au plus simple, je n'ai pas mis les contrôles d'ouverture et écriture des fichiers.

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------
    
    AutoIt Version : 3.2.12.0
    Auteur:         Tlem
    
    Fonction du Script :
    Extraction des adresses Email d'une page HTML avec filtrage de doublons.
    
#ce ----------------------------------------------------------------------------

$InputFile = "Recup_Email.htm"
$OutputFile = "Liste_Email.txt"

$File = FileRead($InputFile)

$aEmail = StringRegExp($File, "mailto:([A-Za-z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})", 3)

If Not @error Then
    $aFilteredEmail = _ArrayUnique($aEmail, '', 0)

    Dim $Res
    For $i = 1 To $aFilteredEmail[0]
        $Res &= $aFilteredEmail[$i] & @CRLF
    Next

    FileWrite($OutputFile, $Res)
EndIf

ShellExecute($OutputFile)
Exit


Func _ArrayUnique(ByRef $aArray, $vDelim = '', $iBase = 1, $iUnique = 1)
    If $vDelim = '' Then $vDelim = Chr(01)
    Local $sHold
    For $iCC = $iBase To UBound($aArray) - 1
        If Not StringInStr($vDelim & $sHold, $vDelim & $aArray[$iCC] & $vDelim, $iUnique) Then _
                $sHold &= $aArray[$iCC] & $vDelim
    Next
    Return StringSplit(StringTrimRight($sHold, StringLen($vDelim)), $vDelim)
EndFunc   ;==>_ArrayUnique
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] RegExp - Extraction des adresses Mail d'un fichier.

#2

Message par Tlem »

Pour ceux et celles qui recherche le pattern d'une expression régulière, je vous recommande d'aller faire un tour ici.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [UDF] RegExp - Extraction des adresses Mail d'un fichier.

#3

Message par ani »

En voici un autre : RegexLib

faudra revoir le pattern, à mon avis comme çà il prendra pas tout les noms de domaine (australien)...co.uk

Sinon :([A-Za-z0-9._%-]+@[a-zA-Z0-9.-]+\.[\w]{2,4})
peut devenir ([-.\w]+@[-.\w]+\.[\w]{2,4})

autre parttern
([-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6})
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] RegExp - Extraction des adresses Mail d'un fichier.

#4

Message par Tlem »

Voici donc une petite fonction de validation d'une adresse email :

Code : Tout sélectionner

If _IsValidEmail("toto@titi.fr") Then
    MsgBox(64,"", "Adresse email valide")
Else
    MsgBox(16,"", "Adresse email invalide")
EndIf

Func _IsValidEmail($Email)
    Return StringRegExp($Email, "^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$")
EndFunc
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre