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

Langage Java Discussion :

extraire une partie d'un corps d'un message


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut extraire une partie d'un corps d'un message
    bonjour,
    je viens vers vous car je suis bloqué.
    en faite j'ai une fonction qui lis des fichiers .eml
    le corps des messages ressemblent à ceci :
    premier fichier : fhgzkfjzghiueghdfgzeiutghzepthaezbgpiebhrerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrtuegf 2e fichier :
    Nom : Capture2.PNG
Affichages : 295
Taille : 11,0 KoNom : Capture.PNG
Affichages : 241
Taille : 17,4 Ko

    je lis ligne par ligne pour extraire les données de la sections 1 et 3 (à terme je dois mettre ces données dans des propriétés d'objet pour ensuite stocker en base)
    en gros chaque ligne des sections 1 et 3 seront des propriétés et la section 2 sera une seule propriété.

    pour la section 1 et 3 c'est bon, c'est pour la section 2 que je ne sais pas comment faire

    j'ai fais pleins d'essais : par exemple j'ai essayé avec un numéro de ligne et ensuite faire un while pour dire que tant que je suis dans la section 2 j'affiche les données mais ça ne marche pas
    le problème c'est que la section 2 varie d'un fichier à l'autre, et dans certains il y a plusieurs fois 3 sections.

    j'ai même essayé de faire 2 while séparé : le premier parcours les fichiers et repère les lignes où commencent les sections 2 et 3 et ensuite dans le while que j'utilise je met un while pour dire que tant que la ligne actuelle est entre la section 2 et 3 j'affiche les données mais rien ne marche

    j'ai surement mal fais quelque chose mais je n'arrive pas à voir c'est quoi.

    Code JAVA : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    public void lireTout()
        {
            ArrayList<String> allFiles = new ArrayList<String>();
            listeRepertoire(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016\\dossiers extraites"), allFiles);
     
            try
            {
                File f;
     
                Properties props;
                Session mailSession;
                InputStream source;
                MimeMessage message;
                Email email;
     
                for (String file : allFiles)
                {
                    f = new File(file);
                    System.out.println(f.getAbsolutePath());
     
                    // utilisation de l'API MimeMessage pour ouvrir les fichiers .eml
                    props = System.getProperties();
                    props.put("mail.host", "smtp.dummydomain.com");
                    props.put("mail.transport.protocol", "smtp");
                    mailSession = Session.getDefaultInstance(props, null);
                    source = new FileInputStream(f);
                    message = new MimeMessage(mailSession, source);
     
                    // utilisation de l'API Email pour la lecture du corps des messgages.
                    String body = null;
                    if (!f.getName().endsWith(".html"))
                    {
                        email = EmailConverter.mimeMessageToEmail(message);
                        // corps du message
                        body = email.getText();
     
                        BufferedReader reader = new BufferedReader(new StringReader(body));
                        String line = reader.readLine();
     
                        String section1 = "============================== SECTION 1 ==============================";
                        String section2 = "============================== SECTION 2 ==============================";
                        String section3 = "============================== SECTION 3 ==============================";
                        String end = "=======================================================================";
     
                        String nomBatch = "Nom du BATCH";
                        String versionBatch = "Version Architecture BATCH";
                        String versionAppli = "Version:";
                        String debut = "Début du Batch";
                        String fin = "Fin du Batch";
                        String duree = "Duree du Batch";
     
                        while (line != null)
                        {
                            /* ============================== SECTION 1 ============================== */
                            if (line.contains(nomBatch))
                            {
                                System.out.println("Batch :" + this.decouper(line, ":"));
                            }
                            if (line.contains(versionBatch))
                            {
                                System.out.println("Version Batch : " + this.decouper(line, ":"));
                            }
                            if (line.contains(versionAppli))
                            {
                                System.out.println("Version Appli : " + this.decouper(line, ":"));
                            }
                            if (line.contains(debut))
                            {
                                System.out.println("Début : " + this.decouper(line, ":"));
                            }
                            /*if (!line.contains(nomBatch) && !line.contains(versionBatch) && !line.contains(versionAppli)
                                && !line.contains(debut) && !line.contains(fin) && !line.contains(duree) && !line.contains(section1)
                                && !line.contains(section2) && !line.contains(section3)  && !line.contains(end))
                            {
                                System.out.println(line);
                            }*/
     
                            /* ============================== SECTION 3 ============================== */
                            if (line.contains(fin))
                            {
                                System.out.println("Fin : " + this.decouper(line, ":"));
                            }
                            if (line.contains(duree))
                            {
                                System.out.println("Durée : " + this.decouper(line, ":"));
                            }
                            line = reader.readLine();
                        }
                        reader.close();
                    }
                }
            }
            catch (IOException | MessagingException exception)
            {
                System.out.println("Erreur lors de la lecture : " + exception.getMessage());
            }
        }
    ça c'est la dernière version que j'ai. même ça c'est pas bon parce que j'ai vu qu'il y avait des données qui sont en dehors des 3 sections (que je n'ai pas besoin de traiter)
    est-ce que vous pouvez m'aider svp

  2. #2
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut
    bon j'ai finalement trouvé une solution. dites-moi si c'est bon ou si on peut faire plus simple
    Code JAVA : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    public void lireTout()
        {
            ArrayList<String> allFiles = new ArrayList<String>();
            listeRepertoire(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016\\dossiers extraites"), allFiles);
     
            try
            {
                File f;
     
                Properties props;
                Session mailSession;
                InputStream source;
                MimeMessage message;
                Email email;
     
                for (String file : allFiles)
                {
                    f = new File(file);
                    System.out.println(f.getAbsolutePath());
     
                    // utilisation de l'API MimeMessage pour ouvrir les fichiers .eml
                    props = System.getProperties();
                    props.put("mail.host", "smtp.dummydomain.com");
                    props.put("mail.transport.protocol", "smtp");
                    mailSession = Session.getDefaultInstance(props, null);
                    source = new FileInputStream(f);
                    message = new MimeMessage(mailSession, source);
     
                    // utilisation de l'API Email pour la lecture du corps des messgages.
                    String body = null;
                    if (!f.getName().endsWith(".html"))
                    {
                        email = EmailConverter.mimeMessageToEmail(message);
                        // corps du message
                        body = email.getText();
     
                        BufferedReader reader = new BufferedReader(new StringReader(body));
                        String line = reader.readLine();
     
                        String section2 = "============================== SECTION 2 ==============================";
                        String section3 = "============================== SECTION 3 ==============================";
     
                        String nomBatch = "Nom du BATCH";
                        String versionBatch = "Version Architecture BATCH";
                        String versionAppli = "Version:";
                        String debut = "Début du Batch";
                        String fin = "Fin du Batch";
                        String duree = "Duree du Batch";
     
                        boolean tokenFound = false;
                        while (line != null)
                        {
                            /* ============================== SECTION 1 ============================== */
                            if (line.contains(nomBatch))
                            {
                                System.out.println("Batch :" + this.decouper(line, ":"));
                            }
                            if (line.contains(versionBatch))
                            {
                                System.out.println("Version Batch : " + this.decouper(line, ":"));
                            }
                            if (line.contains(versionAppli))
                            {
                                System.out.println("Version Appli : " + this.decouper(line, ":"));
                            }
                            if (line.contains(debut))
                            {
                                System.out.println("Début : " + this.decouper(line, ":"));
                            }
     
                            /* ============================== SECTION 2 ============================== */
                            if (line.equals(section2))
                            {
                                tokenFound = true;
                            }
                            else if (line.equals(section3))
                            {
                                tokenFound = false;
                            }
                            if (tokenFound)
                            {
                                if (!line.contains(section2))
                                {
                                    System.out.println(line);
                                }
                            }
     
                            /* ============================== SECTION 3 ============================== */
                            if (line.contains(fin))
                            {
                                System.out.println("Fin : " + this.decouper(line, ":"));
                            }
                            if (line.contains(duree))
                            {
                                System.out.println("Durée : " + this.decouper(line, ":"));
                                System.out.println("");
                            }
     
                            line = reader.readLine();
                        }
                        reader.close();
                    }
                }
            }
            catch (IOException | MessagingException exception)
            {
                System.out.println("Erreur lors de la lecture : " + exception.getMessage());
            }
        }

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    C'est basique mais ça a l'air de marcher. Et souvent, les solutions les plus simples sont les meilleures
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut
    ok cool merci

  5. #5
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut
    j'ai un souci
    je n'arrive pas à mettre ces données dans des propriétés d'objet.
    pour tester avec un seul champs j'ai fais ça :
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                            if (line.contains(nomBatch))
                            {
                                //System.out.println("Batch :" + this.decouper(line, ":").trim());
                                this.unBatchT = new Bilan(this.decouper(line, ":").trim());
                            }
    le problème c'est que si je veux récupérer cette propriété avec son getter je suis obligé de rester dans le if.
    plus bas je mets dans une liste chaque objet this.unBatchT avec this.lesBilans.add(this.unBatchT); à l'intérieur du while toujours.
    mais la liste est toujours vide
    quand je veux accéder avec le getter j'ai un NullPointerException donc l'objet est null mais pourquoi
    je ne comprends pas parce que plus haut j'ai une fonction qui lit un fichier txt et je fais pareille et ça marche

    vous pouvez m'aider svp

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Que fais découper ?

    Je te déconseille également d'utiliser le mot clef "this" si cela n'est pas nécessaire. Cela alourdit pas mal la syntaxe pour pas grand chose.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire une partie d'un string
    Par Bloodscalp dans le forum Langage
    Réponses: 9
    Dernier message: 20/09/2006, 10h43
  2. Réponses: 7
    Dernier message: 18/07/2006, 14h56
  3. Réponses: 2
    Dernier message: 21/05/2006, 19h31
  4. extraire une partie d'image d'une image source
    Par Zen_Fou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2006, 11h20
  5. extraire une partie d'un document rtf
    Par yac dans le forum Oracle
    Réponses: 12
    Dernier message: 08/01/2006, 10h44

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