IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Retrouver les adresses mails dans un fichier texte


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant du Genie Logiciel
    Inscrit en
    Juillet 2011
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant du Genie Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 397
    Points : 73
    Points
    73
    Par défaut Retrouver les adresses mails dans un fichier texte
    salut a vous. je suis appelé a écrire un programme qui recense toutes les adresses mails contenues dans un fichier texte mais je ne sais comment m'y prendre. je sais que je dois passer par les regex (expressions régulières ). aidez moi a pouvoir identifier les emails dans un fichier .

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    sans un exemple de la structure du fichier texte, cela risque d'être dur.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 561
    Points : 21 624
    Points
    21 624
    Par défaut
    Bah le principe d'un fichier texte, c'est qu'il y a pas de structure.

    J'imagine que l'idée est de récupérer tout ce qui ressemble à truc@bidule.machin
    mais du coup je ne vois pas quelle est la question.

    Lire le fichier ligne par ligne et utiliser Pattern.matcher.find() sur chaque ligne, ça aide comme suggestion ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bah le principe d'un fichier texte, c'est qu'il y a pas de structure.

    Lire le fichier ligne par ligne et utiliser Pattern.matcher.find() sur chaque ligne, ça aide comme suggestion ?
    ligne par ligne, c'est déjà une structure

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut
    Essaye avec cette expression régulière : "^([a-zA-Z0-9_.\\-+])+@(([a-zA-Z0-9\\-])+\\.)+[a-zA-Z0-9]{2,4}$" cela devrait te renvoyer les différentes adresses mails de ton fichier.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    dommage que cette expression régulière soit si limitée dans les adresse emails

    Entre les tlds à plus de 4 lettre qui sont refusé, les adresses avec des noms de domaines à plus deux niveau...

    Le plus simple, selon moi, ce serait de prendre ce qu'il y a devant et derrière un @, en ne se limitant qu'aux espaces.

    Après, il y a toute la difficulté liée au texte même, il y a de nombreux cas limites à gérer et il faut analyser le texte en question pour trouver la meilleur manière de faire.

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant du Genie Logiciel
    Inscrit en
    Juillet 2011
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant du Genie Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 397
    Points : 73
    Points
    73
    Par défaut rechercher des adresses email dans un fichier txt
    salut a vous. je tiens d'abord m'excuser pour n'avoir pas répondu a vos réponses .néanmoins, en me servant entre temps d'un cours télécharge sur ce site , j'ai pu avancer dans mon application mais il se trouve que je suis confronté aux problèmes suivant :

    1. L'application ne me renvoit pas les multiples adresses contenues dans mon fichier. que faire


    voici mon corde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
            package tp.miage.lac;
     
     
    import java.util.AbstractList;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
        public class Tools {
     
     
        private static Matcher matcher;
        private static Pattern pattern;
        private List<String> obj=null;
     
                public  Tools(){
                    pattern = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE); 
                    obj = new  ArrayList();
                }
     
     
                public List<String> searchMail(String emailStr){
                    Matcher matcher = pattern .matcher(emailStr.trim());
                    while(matcher.find()){
                        obj.add(matcher.group());
                    }
                    return obj ;
                }
     
            }
    au niveau de l'interface graphique , je procède comme-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
        private void ouvrirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ouvrirActionPerformed
            // TODO add your handling code here:
     
            BufferedReader buffer=null;
            File file=null;
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers", "txt","rtf");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(this);
                if(returnVal == JFileChooser.APPROVE_OPTION) {
                file= chooser.getSelectedFile().getAbsoluteFile();  
                String path= file.getAbsolutePath();
                try{
                // Création du flux bufférisé sur un FileReader, immédiatement suivi par un
                // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
                // est correctement instancié (évite les NullPointerException)
                buffer = new BufferedReader(new FileReader(path));
                String line; 
                    // Lecture du fichier ligne par ligne. Cette boucle se termine
                    // quand la méthode retourne la valeur null.
                    while((line = buffer.readLine()) != null) {
                       List<String> chaine=  tools.searchMail(line);
                       System.out.println(chaine.toString());
                        }   
                } catch(IOException e){
                    e.printStackTrace();
                    }finally {
                       // dans tous les cas, on ferme le flux
                    try {
                        buffer.close();
                    } catch (IOException ex) {
                        ex.getCause();
                    }
                }
            }        
        }//GEN-LAST:event_ouvrirAction

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pattern = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);
    retire le ^ et le $ de ta pattern, sinon ça ne matche que les adresses emails qui sont toutes seules sur une ligne, sans rien d'autre.
    Attention que le rtf ne marcheront pas avec ton code, c'est du binaire.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Points : 39
    Points
    39
    Par défaut
    Salut à tous,

    il semble très difficile de faire cela, j'a lu que la meilleur option est celle ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})
    Tu peux voir un lien qui peut t'aider, il est en anglais:
    http://www.mkyong.com/regular-expres...ar-expression/

    Ton prof t'a demandé une question difficile.

    Bon courage.

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Même cette dernière regexp n'est pas complète, puisqu'il me semble qu'on peut avoir des adresses emails du type suivant (vicieux, je le concède) :

    "J'aime mettre des espaces dans mon adresse email, et elle ne passe jamais les tests de validation :("monadresse@machin-truc.fr

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Le format des emails, dans le RFC, est tellement tordu qu'il est impossible de créer un regexp qui matche tous les cas possibles. Maintenant, on pare d'extraire des emails d'un texte brut, je suppose qu'on tolère une marge d'erreur.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2010, 21h30
  2. Récuperer les saisies clavier dans un fichier texte?
    Par UnSofteuxAmateur dans le forum Delphi
    Réponses: 8
    Dernier message: 25/05/2007, 14h13
  3. Trouver une adresse mail dans un fichier word
    Par vonitiana dans le forum Langage
    Réponses: 18
    Dernier message: 09/06/2006, 17h48
  4. Logiciel : Collecter les adresses mail dans les forums
    Par 123quatre dans le forum Dépannage et Assistance
    Réponses: 4
    Dernier message: 25/05/2006, 19h23
  5. [VB.NET] mailto adresse mail dans zone de text
    Par wilaya dans le forum ASP.NET
    Réponses: 8
    Dernier message: 22/03/2005, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo