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

Java Discussion :

Problèmes ";" avec Java


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2022
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2022
    Messages : 72
    Points : 37
    Points
    37
    Par défaut Problèmes ";" avec Java
    Bonjour,

    Je souhaite supprimer un point-virgule dans un texte avec Java.

    Mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string montexte=email@gmail.com;email2@gmail.com
    J'aimerais remplacer le point virgule par un espace ou une simple virgule.

    peut-être avec la fonction If et montexte.replace(";" ",") comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string montexte=email@gmail.com;email2@gmail.com
    if montexte.contain(";") {
       montexte.replace(";"," ")
    }
    Je suis pas certains le ma ligne IF ...

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .replaceAll(";"," ")


    Cordialement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2022
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2022
    Messages : 72
    Points : 37
    Points
    37
    Par défaut
    Le montexte.contain est bon ?


    car dans mon code il y a plusieurs String et c'est pour un fichier.csv donc je ne veux pas enlever tout les ";" je veux juste pour ce string la "montexte".

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    En fait, tu veux quoi?

    Kire un CSV (ce que je fait actuellement): Il y a open CSV:
    https://www.baeldung.com/opencsv

    Lire un fichier texte?
    https://www.techiedelight.com/fr/rea...-by-line-java/

    Dans ce cas, il faut mieux préciser le besoin...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2022
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2022
    Messages : 72
    Points : 37
    Points
    37
    Par défaut
    En gros j'ai fichier.csv qui est généré par un logiciel.

    comme ceci:

    "Document - N° document;Document - Date;Document - Code client;Document - Adresse 1 (facturation);Document - Notes en texte brut;Document - mail;ect..."

    Dans ce fichier.csv mes données sont en lignes et chaque donnée sont séparé par un point-Virgule mais dans ma donnée email j'ai deux email qui sont séparer par un point-virgule.

    Je souhaiterais pour cette donné que mon java transforme ce point virgule (entre les deux mails) en espace ou même en virgule simple pour ne pas avoir de problème dans le CSV.

    mon code est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String doc_contact_mail= "NANANI@gmail.com;NANA@gmail.com"
    //if doc_contact_mail.endwith(";"){
    					//doc_contact_mail.replace(";","");
    				//}
    Je sais que le //if doc_contact_mail.endwith(";"){ n'est pas bon mais je ne sais pas que mettre à la place de ENDWITH.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    La meilleur (ou plutôt la moins pire) des solutions serait de fabriquer un CSV à par du CSV.

    En fait tu fais un adaptateur:
    https://fr.wikipedia.org/wiki/Adapta...de_conception)

    En gros, toi, tu lis un "bon CSV" et tu n'es capable que de lire un "bon CSV".

    Le problème, c'est que on t'envoie un "mauvais CSV".

    Tu vas donc utiliser un adaptateur qui va te renvoyer le "bon CSV" pour pouvoir être traité.

    En gros:
    "Mauvais CSV" -> Adaptateur -> "Bon CSV".

    A noter que il y a peut être des erreurs potentielles à d'autres lignes de ton CSV.

    En gros, le mieux est de traiter les cellules de chaque ligne.

    Open CSV (dont j'ai déjà donné le lien) fera le taf.

    En gros, admettons que tu as la ligne suivante:
    a;b;c;a.a@a.com;b.b@b.com;d;e

    avec Open CSV, tu va avoir un tableau:
    {"a","b","c","a.a@a.com","b.b@b.com","d","e"}

    Tu va traiter ce tableau pour avoir un bon tableau:
    {"a","b","c","a.a@a.com,b.b@b.com","d","e"}

    Et par OpenCSV, tu va refaire un CSV:
    a;b;c;a.a@a.com,b.b@b.com;d;e

    Évidement, tu peux ne pas utiliser OpenCSV et lire ligne par ligne, mais Open CSV rend un service. Il évite de réinventer la roue carrée.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Moi j'en conclurais plutôt que le CSV est très bien comme il est, et que chaque ligne contient deux champs email.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    Là, ça dépend du besoin.

    Et tu traitement sur me "bon CSV".

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Bon, il y a effectivement un problème de choix du séparateur au départ vu que la valeur d'une colonne contient le séparateur.
    Normalement, quand on génère un fichier csv, on a la possibilité d'encadrer la valeur entre deux caractères, généralement c'est le ".
    Du coup, on se retrouve avec des lignes de la forme "Val1";"Val2";"Val3;Val4","Val5"
    Là, il suffit de lire en partant de la gauche et traiter le caractère " de début et fin pour extraire les données.

    Maintenant, s'il n'est pas possible de demander au soft source de faire ce genre de sortie, on peut s'en sortir relativement simplement s'il n'y a que la colonne email qui est concernée par ce séparateur interne ";".
    Il suffit de faire un split(";") sur la ligne et traiter le nombre de postes du tableau résultant.
    Si on est supposé avoir 4 colonnes et que le tableau a 5 postes, partant du principe que la colonne email est en 3ème position, il suffira de regrouper les postes 2 et 3 pour l'email (2 parce qu'on part de l'indice 0).

    Pour illustrer (avec ce postulat) :
    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
    String[] lines = new String[] { "Val1;Val2;Val3;Val4;Val5", "Val1;Val2;Val3;Val4" };
    String col1 = null;
    String col2 = null;
    String col3 = null;
    String col4 = null;
     
    for (String line : lines)
    {
        String[] parts = line.split(";");
        col1 = parts[0];
        col2 = parts[1];
        col3 = parts[2];
        if (parts.length > 4)
        {
            col3 += (";" + parts[3]);
            col4 = parts[4];
        }
        else
        {
            col4 = parts[3];
        }
     
        System.out.println("Ligne : '" + col1 + "', '" + col2 + "', '" + col3 + "', '" + col4 + "'");
    }
    Ligne : 'Val1', 'Val2', 'Val3;Val4', 'Val5'
    Ligne : 'Val1', 'Val2', 'Val3', 'Val4'
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    Et si on a:
    a;b;c;a.a@a.com;b.b@b.com;c.c@c.com;c;d;e

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas beaucoup plus compliqué puisque si le problème n'est lié qu'à une seule colonne, on peut calculer le nombre d'occurrences de la boucle d'accumulation
    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
     
    String[] lines = new String[] {"AA;BA;CA;a.a@a.com;b.b@b.com;c.c@c.com;DA;EA;FA", "AB;BB;CB;a.a@a.com;DB;EB;FB"};
    int targetColumns = 7;
    int multipleValuesStartIdx = 3;
     
    for (String line : lines)
    {
        String[] values = new String[targetColumns];
        int targetIdx = 0;
        String[] parts = line.split(";");
     
        for (int i = 0; i < parts.length; i++)
        {
            if (i < (multipleValuesStartIdx+1) || parts.length == targetColumns)
            {
                values[targetIdx++] = parts[i];
            }
            else if (i < (parts.length - targetColumns) + multipleValuesStartIdx + 1)
            {
                values[multipleValuesStartIdx] += (";" + parts[i]);
            }
            else
            {
                values[targetIdx++] = parts[i];
            }
        }
     
        for (String value : values)
        {
            System.out.println(value);
        }
        System.out.println("-------------");
    }
    AA
    BA
    CA
    a.a@a.com;b.b@b.com;c.c@c.com
    DA
    EA
    FA
    -------------
    AB
    BB
    CB
    a.a@a.com
    DB
    EB
    FB
    -------------
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème envoi mail avec java
    Par poupouce5 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/06/2008, 00h22
  2. probléme d'insertion avec java mysql
    Par ulysse031 dans le forum JDBC
    Réponses: 1
    Dernier message: 02/12/2007, 01h33
  3. Problème utilisation OrdImage avec java et servlet
    Par Shouill dans le forum Oracle
    Réponses: 1
    Dernier message: 23/03/2007, 17h23
  4. Problème de date avec JAVA & Oracle
    Par bobic dans le forum JDBC
    Réponses: 2
    Dernier message: 02/11/2006, 13h21

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