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

Collection et Stream Java Discussion :

[regex]extraction de lignes


Sujet :

Collection et Stream Java

  1. #1
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut [regex]extraction de lignes
    Bonjour tout le monde,

    J'ai quelque notions en expressions régulières mais là je n'y arrive pas .
    J'ai un fichier texte dont je voudrais récupérer les lignes commençant soit par FX.Y où X est un nombre quelconque (qui peut commencer par zéro, par exemple 06 ) et Y un espace, soit par .XY avec X et Y ayant la mème définition que précédemment.

    Voici le bout de code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while((ligne=in.readLine())!=null){
                                if(Pattern.matches("F[0-9]+\\.",ligne) || Pattern.matches("\\.[0-9]+",ligne)){
                                    out.write(ligne+System.getProperty("line.separator"));
                                }
    Avec ce code, tous les fichiers sortie sont vides.

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par afrikha
    et Y un espace
    Je ne vois nul espace dans tes expressions régulières, peut-être que ton problème viens de là.
    Remarque : tu peux remplacer [0-9] par \d
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Pattern.matches("F\\d+\\. ", ligne) || Pattern.matches("\\.\\d+ ", ligne))

  3. #3
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par le y@m's
    Je ne vois nul espace dans tes expressions régulières, peut-être que ton problème viens de là.
    Oui après coup j'ai réalisé et j'ai ajouté un espace mais sans succés.
    Remarque : tu peux remplacer [0-9] par \d
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Pattern.matches("F\\d+\\. ", ligne) || Pattern.matches("\\.\\d+ ", ligne))
    Merci pour la remarque, mais ça ne marche toujours pas

    [EDIT] j'ai essayé comme ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while((ligne=in.readLine())!=null){
                                if(Pattern.matches("^F\\d+\\. ",ligne) || Pattern.matches("^\\.\\d+ ",ligne)){
                                    out.write(ligne+System.getProperty("line.separator"));
                                }
                            }
    mais toujours rien...

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Pourrais-tu poster le contenu de ton fichier (ou une partie s'il est trop long) en spécifiant les lignes qui doivent être récupérées pour avoir un exemple concret.

  5. #5
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par le y@m's
    Pourrais-tu poster le contenu de ton fichier (ou une partie s'il est trop long) en spécifiant les lignes qui doivent être récupérées pour avoir un exemple concret.
    Voilà :
    Maladie d'Alzheimer, type 1
    F00.2* Démence de la maladie d'Alzheimer, forme atypique ou mixte (G30.8+)
    Démence atypique, de type Alzheimer

    F00.9* Démence de la maladie d'Alzheimer, sans précision (G30.9+)

    F01 Démence vasculaire
    La démence vasculaire résulte d'un infarcissement cérébral dû à une maladie vasculaire, par exemple, une maladie cérébrovasculaire hypertensive. Les infarctus sont habituellement de petite taille mais leurs effets sont cumulatifs. La démence survient habituellement à un âge avancé.

    Comprend : démence artériopathique

    F01.0 Démence vasculaire à début aigu
    Démence vasculaire qui s'installe, habituellement de façon rapide, à la suite d'ictus cérébraux répétés, liés à des thromboses vasculaires, des embolies ou des hémorragies. Il est rare que la cause en soit un infarcissement massif unique.
    F01.1 Démence vasculaire par infarctus multiples
    Démence vasculaire dont le début est progressif, qui fait suite à de nombreux épisodes ischémiques transitoires provoquant des lacunes dans le parenchyme cérébral.

    Démence à prédominance corticale
    F01.2 Démence vasculaire sous-corticale
    Démence vasculaire avec antécédent d'hypertension artérielle et de foyers de destruction ischémique dans la substance blanche profonde des hémisphères cérébraux. Le cortex cérébral est habituellement indemne, ce qui tranche avec le tableau clinique qui peut être proche de celui de la démence de la maladie d'Alzheimer.
    F01.3 Démence vasculaire mixte, corticale et sous-corticale

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    En faite je viens de me rendre compte que l'on a oublié de rajouter ".*" à la fin de l'expression régulière . En effet, on avait défini le début dans nos expressions régulière et non les lignes complètes.
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Pattern.matches("F\\d+\\. .*", ligne) || Pattern.matches("\\.\\d+ .*", ligne))
    [edit]
    Attention, tes lignes
    F00.2* Démence de la maladie d'Alzheimer, forme atypique ou mixte (G30.8+)
    et
    F00.9* Démence de la maladie d'Alzheimer, sans précision (G30.9+)
    ne correpondent pas au pattern.
    [/edit]

  7. #7
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    ça ne marche toujours pas : aucune ligne n'est extraite. Peut-étre que le problème ne vient pas des regex.

    Voici mon code en entier :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    /*
     * Extraction.java
     *
     * Crée le 11 septembre 2006, 18:17
     *
     *
     */
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.regex.Pattern;
     
    /**
     *
     * @author Anis Frikha
     */
    public class Extraction {
     
        /** Crée une nouvelle instance de  Extraction */
        public Extraction() {
        }
        public static void main(String[] args) {
            String ligne;
     
     
            BufferedReader in;
            BufferedWriter out;
            for(int i=1;i<=10;i++){
                try{
                    in=new BufferedReader(new FileReader("./sources/source"+i+".txt"));
                    try{
                        out=new BufferedWriter(new FileWriter("./sorties/sortie"+i+".txt"));
                        try{
                            while((ligne=in.readLine())!=null){
                                if(Pattern.matches("^F\\d+\\. .*",ligne) || Pattern.matches("^\\.\\d+ .*",ligne) || Pattern.matches("^\\.\\d+\\* .*",ligne)){
                                    out.write(ligne+System.getProperty("line.separator"));
                                }
                            }
                            System.out.println("Fichier "+i+" fait !");
                        } finally{
                            out.close();
                        }
                    }finally{
                        in.close();
                    }
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
     
        }
    }

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Non, le problème vient bien de l'expression régulière, en fait il vient plus particulièrement que X peut être un nombre décimal (cf ton exemple) ce qui n'était pas prévu dans les expressions régulières données jusqu'à présent.
    Par exemple pour la prémière cela donne un truc du genre

  9. #9
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Merci le y@m's

    ça marche impec !


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

Discussions similaires

  1. Extraction de lignes
    Par francky159 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/11/2007, 00h47
  2. [RegEx] Pb Regex extraction URL
    Par fly06 dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2006, 22h58
  3. requête extraction dernière ligne table
    Par COLOMBAT dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/06/2006, 10h57
  4. Réponses: 52
    Dernier message: 23/05/2006, 12h08
  5. Extraction de ligne identique
    Par sacados1 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/12/2005, 11h24

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