Regex

Résolu
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007 - 30 juin 2006 à 10:48
cs_valckar Messages postés 34 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 30 juin 2006 - 30 juin 2006 à 16:15
Salutà tous,

J'ai un fichier CSV structurer ainsi : "Titre","Prénom","Nom"... Et le problème est que chaque champ est compris entre guillements ?

Voilà ce que j'ai écrit pour récupérer chaque champ :

-_-_-_-_-_-_-_

/*
 * Créé le 29 juin 2006
 *
 * TODO Pour changer le modèle de ce fichier généré, allez à :
 * Fenêtre - Préférences - Java - Style de code - Modèles de code
 */
package tests;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author mpayet
 *
 * TODO Pour changer le modèle de ce commentaire de type généré, allez à :
 * Fenêtre - Préférences - Java - Style de code - Modèles de code
 */
public class Test1 {

    public static void main(String[] args) {

        try {

            BufferedReader lecteurAvecBuffer = null;
            String ligne;

            try {
                lecteurAvecBuffer = new BufferedReader(new FileReader(new File(
                        "C:" + File.separator + "contacts.CSV")));
                System.out.println("Fichier ouvert");
            } catch (FileNotFoundException exc) {
                System.out.println("Erreur d'ouverture");
            }

            while ((ligne = lecteurAvecBuffer.readLine()) != null) {
                System.out.println(ligne);

                Matcher matcher = Pattern.compile(""[' -_a-zA-Z]*"").matcher(
                        ligne);

                /*
                 * C'est SUPER important d'utiliser FIND c'est un peu comme un
                 * iterator
                 */
                String civilite;
                String prenom;
                String nom;
                /* Récupérer la civilité */
                if (matcher.find()) {
                    civilite = matcher.group(0);
                    System.out.print(" civilité " + civilite);

                    civilite = Pattern.compile("[^a-zA-Z]").matcher(civilite)
                            .replaceAll("");
                    System.out.print(" civilité " + civilite);
                }

                /* Récupérer le prenom */
                if (matcher.find()) {
                    prenom = matcher.group(0);
                    System.out.print(" prenom " + prenom);

                    prenom = Pattern.compile("[^-'_a-zA-Z]").matcher(prenom)
                            .replaceAll("");
                    System.out.print(" prenom " + prenom);
                }

                /* Récupérer le nom */
                if (matcher.find()) {
                    nom = matcher.group(0);
                    System.out.print(" nom " + nom);

                    nom = Pattern.compile("[^-'_a-zA-Z]").matcher(nom)
                            .replaceAll("");
                    System.out.print(" nom " + nom);
                }
                System.out.println();

            }

            lecteurAvecBuffer.close();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

-_-_-_-_-_-_-_-_-_-_

Ci dessous la sortie standart :

Fichier ouvert
"Titre","Prénom","Nom"
 civilité "Titre"," civilité Titre prenom ","Nom" prenom Nom

-_-_-_-_-_-_-_

Comment fait-on pour matcher une chaîne de caractères qui est comprise entre deux guillements ? Quoiqu'il y ait entre les deux guillemets...
Y a t-il en JAVA une méthode qui split en fontion d'un pattern ? Soit, existe t-il l'équivalant de ce code PERL : split /REGEX/, string;

Merci d'avance pour toutes ces réponses...

__

LNP...
pour vous...

2 réponses

cs_valckar Messages postés 34 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 30 juin 2006
30 juin 2006 à 16:15
Salut, la méthode split existe dans String.
3
thenaoh Messages postés 111 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 24 juin 2015
30 juin 2006 à 12:31
Salut !

Alors, de mémoire, je pense que ceci devrait marcher : Dans le package java.util.regex, il y a une magnifique classe nommée Pattern, que l'on peut utiliser comme suit :

import java.util.regex;
...
String laChaineAMatcher = ... ;
boolean estCeQueMaChaineMatche = Pattern.matches(expressionReguliere, laChaineAMatcher);

Pour le détail de l'expression régulière, y'a pas mal d'info dans la javadoc de la classe Pattern. Je te laisse regarder, c'est plutôt complet.

Voilo ! bon courage !
0
Rejoignez-nous