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 :

Extraction chaine formattée


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Par défaut Extraction chaine formattée
    Bonjour à tous,

    Je ne suis pas un grand adepte de Java mais je connais pas mal de langages étant développeur et je me posais une question à laquelle j'espère un de vous saura répondre.

    J'ai une application qui doit gérer de la persistance à partir d'une liste de bouquins. Seulement cette liste m'est fourni pas l'utilisateur (toujours au même format).

    Mais chaque utilisateur n'utilise pas forcément le même format pour le nom de son livre. Je voudrai si possible à partir d'une chaine saisie par l'utilisateur, extraire les données en fonction du format. Je vais illustrer mes propos au travers d'un exemple.

    L'utilisateur saisi :
    {nomAuteur},{prénomAuteur} - {titre}
    ou encore
    {auteur}-[{collection}, {N°Tome}]{titre}

    Je voudrais être capable de générer un Regex (ou autre chose) permettant d'extraire d'abord l'auteur puis le titre et le cas échéant la collection afin de remplir ma base de donnée.

    Est-ce possible sans définir de règles de base ?

    Merci d'avance pour vos réponses

  2. #2
    Membre expérimenté Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Par défaut
    Sans imposer de formalisme, cela me semble totalement ingérable. La seule chose que tu puisses faire est de distinguer les chaînes de caractères des numériques, ... Mais ça ne va pas résoudre ton problème.

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    A priori ton problème n'est pas JAVA...

    JAVA te permet d'utiliser des expressions régulières, c'est un fait. Après il est de ton ressort d'écrire cette dernière comme il le faut.

    Ensuite, si tu as besoin de plusieurs expressions, il te suffit de bien les construire et de faire un bon vieux IF par exemple... du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(monText.match("monExpression"){
        //je récupère les données de la manière A
    }
    else if(monText.match("monExpression2"){
        //je récupère de la manière B...
    }
    Concernant le stockage en base de données, la encore JAVA te le permet facilement, à toi de lui fournir les données...

    Donc pour conclure, rien de ce que tu souhaite n'est impossible avec JAVA, et je pense que ton problème se situe plus sur la logique globale de ton application, à savoir, "comment faire de belles expressions pour récupérer mes données peu importe la syntaxe?"

    Et donc pour moi, à vue d'œil, il te faut plusieurs expression régulières. La vrai difficulté sera de faire en sorte d'écrire tes expressions de manière a ce qu'une seule puisse matcher avec chaque "modèle" de données que tu pourras recevoir.

  4. #4
    Membre expérimenté Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Par défaut
    Je vois pas comment une expression régulière pourrait distinguer un nom d'un prénom ... ou tout autre chaîne de caractère
    Et le nombre de possibilité (if ... else if) est potentiellement énorme.

    Une idée pourrait être de repérer les différents formats utilisés et les convertir vers un format unique.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Par défaut
    oui merci Michon c'est bien ce que je pensait le problème est les expressions régulières et moi ça fait 42 ...

  6. #6
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    l'expression regulière ne fera pas de différences entre nomet prénoms, c'est une évidence.

    Cependant, au vue de l'exemple qu'il donne, il y a un certains nombre de caractères spéciaux dans les chaînes qu'il traite. Donc la succession de caractère spéciaux est potentiellement unique suivant ses différents format...

    par exemple, une expression regulière pourra très bien différencier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "xxxx{xxx} - xx [xxx]"
    " xxx[xxxx] {xxx} - xxx"
    etc. Dans ce cas, il faut se baser sur la reconnaissance des caractères spéciaux comme "{", "}", "[", "]", "-" etc...

    Pour voir rapidement si cela est possible, je te recommande la chose suivante : Prend tes données comme tu les recois, et enlève toutes les lettres, chiffres, espace, et ne garde que les caractères spéciaux. Pour les 2 exemple que j'ai donné, on aurait :

    tu fais cela pour chaque format que tu peux recevoir. si la chaîne de caractère spéciaux est unique et qu'aucun autre format n'a la même, les expression regulière te permettront de faire ce que tu souhaite facilement. Il suffira de faire un "if.. else if... else" pour adapter la récuperation des données à chaque cas.

    Après je ne sais pas combien tu as de formats différents... mais il ne doit pas en avoir 200... si ?

Discussions similaires

  1. [RegEx] Extraction chaine ou debut d'adresse mail
    Par cerede2000 dans le forum Langage
    Réponses: 11
    Dernier message: 29/05/2007, 22h40
  2. [VS2005] Parcourir Chaine formatté en XML
    Par belfaigore dans le forum VB.NET
    Réponses: 1
    Dernier message: 02/04/2007, 10h44
  3. [RegEx] Extraction chaine de caractere
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 16h05
  4. [String] Extraction chaine de caractères
    Par beZor dans le forum Langage
    Réponses: 9
    Dernier message: 27/02/2006, 14h46
  5. Extraction chaine
    Par ptitsoleil87 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/02/2005, 10h53

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