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

avec Java Discussion :

Récupérer une chaine de caractères en majuscule


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Récupérer une chaine de caractères en majuscule
    Bonjour,

    Voila ma problématique
    j'ai une base de donnée mysql et j'y importe un fichier csv d'une autre application, dans le fichier csv, il y a :
    • un champ Nom&Prénom d'un usager, et les données sont de ce type : "DUPONT Marcel" "MARTIN DUPUIS Roberte", etc....

    • un champ Nom d'un usager, et les données sont de ce type : "DUPONT" "MARTIN DUP", etc.... (le champ nom est codé sur 10 caractère dans le fichier csv donc des fois il y a des lettres qui manquent comme pour "MARTIN DUPUIS" on trouve seulement "MARTIN DUP"



    je voudrais faire une petite boucle de traitement sql, et redispatcher dans ma base mysql (qui fait la distinction NOM et PRENOM comme deux champs distincts)

    si quelqu'un pouvait m'aider à elaborer la petite routine qui me faciliterait la vie, ou me donner 1 piste...

    ***EDIT:
    en gros j'aimerais à l'intérieur de ma boucle pouvoir récuperer deux variable, l'une contenant le nom en majuscule "DUPONT" ou "MARTIN DUPUIS", et l'autre variable contenant le reste du champ (le prenom)

    l'export de l'autre application est toujours identique, le nom est toujours en majuscule, et peut etre séparé par des espaces
    ***

    Merci d'avance

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    J'ai pas pigé ce que tu as en entrée ? Pour ce que tu veux en sortie c'est bon par contre.

    PS : Marrant ton pseudo
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    En entrée,
    j'ai des informations de ce style:

    1. Nom&Prenom---------------------------Nom

    • DUPONT Marcel-------------------------Marcel

    • MARTIN DUPUIS Roberte-----------------MARTIN DUP (10 lettres Max)

    • ANDREBASTOSSILVA--------------------ANDREBASTO


    En gros: le champ nom&prenom est codé sur 30carac et Nom sur 10carac.
    Et il faut extraire le nom seul et aprés prénom.
    J'espère que j'étais un peu plus clair.
    Merci pour votre aide

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    j'ai pensé à faire une extraction par rapport aux lettres en majuscule en utilisant les expressions régulières:
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pattern p = Pattern .compile("[A-Z]");
    String entree = "DUPONT Marcel";
    Matcher m = p.matcher(entree);
    while (m.find())
        System.out.println(entree.substring(m.start(), m.end()));
    mais le problème c'est que la première lettre du prénom est en majuscule aussi

  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Et je suppose aussi que tu peux avoir des exemples de ce genre ?
    - Entrée : DUPONT Charles Henri
    - Sortie :
    * Nom = DUPONT
    * Prénom = Charles Henri
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    tout à fait )))

  7. #7
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par bo_goss Voir le message
    tout à fait )))
    J'ai pas d'algo tout près sous la main mais je t'orienterais plutôt dans le principe suivant :
    1. Tu recherches dans ta chaîne l'emplacement de la première minuscule
    2. Pour le prénom :
    prénom = string.split(minuscule.emplacement - 1, string.taille)
    3. Pour le nom :
    nom = string.split(0, minuscule.emplacement - 2)
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Est ce que vous pouvez etre un peu plus clair parceque je ne vois pas du tout ce que vous voulez dire par ce bout de code et surtout comment je peux chercher l'emplacement variable de la lettre en minuscule !!!
    Et merci encore pour vos réponses

  9. #9
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Bah en faisant un peu comme ce que tu as fais pour les majuscules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pattern p = Pattern .compile("[a-z]");
    String entree = "DUPONT Marcel";
    Matcher m = p.matcher(entree);
    int emplacementPremiereMinuscule = m.start();
     
    string nom = entree.substring(0, emplacementPremiereMinuscule - 2);
    string prenom = entree.substring(emplacementPremiereMinuscule - 1, entree.length());
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour la réponse !!!
    Mais pour récupérer la première lettre en minuscule de la variable prénom , la ligne : int emplacementPremiereMinuscule = m.start();
    retourne l'erreur suivante: Exception in thread "main" java.lang.IllegalStateException: No match available
    at java.util.regex.Matcher.start(Unknown Source)

    Y' a pas un autre moyen pour récupérer cet index qui pointe sur la première minuscule ?.?

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    Extraire d'abord le prénom en recherchant le dernier espace (qui donc précède le prénom):

    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
     String nom = "";
             String pre = "";
     
             String nP = "MARTIN DUP Roberte";
     
             int index = nP.lastIndexOf(" ");
             if(index > -1) // si = -1 >> la structure est incorrecte
             {
                pre = nP.substring(index +1);
                System.out.println("Prenom : " + "\"" + pre + "\"");
     
                nom = nP.substring(0, index);
                nom = nom.trim();
                System.out.println("Nom : " + "\"" + nom + "\"");
             }
    Cordialement,

    Dan

  12. #12
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci Dan pour la réponse
    j'ai essayé d'adapté le code pour prendre en compte le cas ou le prénom est composé style : DUPONT Jean Pierre (Nom: DUPONT, Prénom: Jean Pierre).
    Si je prend l'index sur le champ espace " " j'aurai comme retour:
    Nom: DUPONT Jean
    Prénom: Pierre

    Est ce que vous pouvez m'aider???
    et merci encore

  13. #13
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    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
    String entree = "MACHIN TRUC Régis René";
    int emplacementPremiereMinuscule = -1;
     
    char[] test = entree.toCharArray();
    for(int i=0; i< test.length; i++) {
    	if (java.lang.Character.isLowerCase(test[i])) { // Recherche de la première minuscule
    	emplacementPremiereMinuscule = i;
    	break;
    	}
    }
     
    if (emplacementPremiereMinuscule != -1) {
    	String nom = entree.substring(0, emplacementPremiereMinuscule - 2);
    	String prenom = entree.substring(emplacementPremiereMinuscule - 1, entree.length());
     
    	System.out.println("NOM : " + nom);
    	System.out.println("PRENOM : " + prenom);
    }
    J'me demande si au final tu as cherché ou juste attendu nos réponses

    Citation Envoyé par bo_goss Voir le message
    Merci beaucoup pour la réponse !!!
    Mais pour récupérer la première lettre en minuscule de la variable prénom , la ligne : int emplacementPremiereMinuscule = m.start();
    retourne l'erreur suivante: Exception in thread "main" java.lang.IllegalStateException: No match available
    at java.util.regex.Matcher.start(Unknown Source)
    J'avais juste oublié le m.find() avant le m.start().
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Re,

    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
    String nom = "";
             String pre = "";
     
             String nP = "MARTIN DUP Marie Roberte";
     
             int rang = 0;
     
             for(rang = 0; rang < nP.length(); rang++)
             {
                char car = nP.charAt(rang);
                if(Character.isLowerCase(car))
                {
                   System.out.println("rang = " + rang);
                   nom = nP.substring(0, rang -2);
                   pre = nP.substring(rang -1);
                   break;
                }
             }
     
     
             System.out.println("Le nom : " + "\"" + nom + "\"");
             System.out.println("Le prénom : " + "\"" + pre + "\"");

  15. #15
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    @Danimo : tu viens de fournir le même code que moi
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    @Danimo : tu viens de fournir le même code que moi
    Salut,

    Presque Robin, presque car je n'utilise pas de tableau mais teste directement le caractère (char) se trouvant à l'índice rang.

    Je n'irai pas jusqu'à dire (en tout cas pour ma part) que les grands esprits se rencontrent, mais je précise que c'est tout à fait fortuit.

    Cordialement,

    Dan

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par bo_goss Voir le message
    En entrée,
    j'ai des informations de ce style:

    1. Nom&Prenom---------------------------Nom

    • DUPONT Marcel-------------------------Marcel

    • MARTIN DUPUIS Roberte-----------------MARTIN DUP (10 lettres Max)

    • ANDREBASTOSSILVA--------------------ANDREBASTO


    En gros: le champ nom&prenom est codé sur 30carac et Nom sur 10carac.
    Et il faut extraire le nom seul et aprés prénom.
    J'espère que j'étais un peu plus clair.
    Merci pour votre aide
    Pour respecter cette citation (même si c'est en gros) le code deviendrait:

    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
    String nom = "";
             String pre = "";
     
             String nP = "MARTIN DUPUIS Marie Roberte1234567890";
     
             int rang = 0;
             for(rang = 0; rang < nP.length(); rang++)
             {
                char car = nP.charAt(rang);
                if(Character.isLowerCase(car))
                {
                   System.out.println("rang = " + rang);
                   nom = nP.substring(0, rang -2);
     
                   // Si le champ nom&prenom est codé sur 30carac et Nom sur 10carac.
                   // le nom aura une longueur maxi de 10 et le prénom de 20.
     
                   if(nom.length() >10)
                      nom = nom.substring(0, 10);
                   pre = nP.substring(rang -1);
                   if(pre.length() >20)
                      pre = pre.substring(0, 20);
                   break;
                }
             }
     
             System.out.println("Le nom : " + "\"" + nom + "\"");
             System.out.println("Le prénom : " + "\"" + pre + "\"");

Discussions similaires

  1. [RegEx] Récupérer une chaine de caractéres par strpos
    Par bdptaki dans le forum Langage
    Réponses: 11
    Dernier message: 21/04/2009, 11h43
  2. Répérer une chaine de caractère en Majuscules
    Par rvaysse dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 10/06/2008, 13h39
  3. Réponses: 5
    Dernier message: 22/06/2006, 17h19
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  5. Récupérer une chaine de caractère dans une page
    Par BrunS dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2005, 14h28

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