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

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2019
    Messages : 4
    Points : 2
    Points
    2

    Par défaut Ligne entrée au clavier avec format à respecter.

    Bonjour. Je débute en java, et je n'arrive pas à terminer un test.
    Je dois:
    - Écrire un programme qui lit au clavier une ligne au format CSV contenant trois champs (trois colonnes) séparées par des points-virgules.
    Le premier est le nom d'une personne, le second son prénom et le troisième contient la date de naissance. Le nom et le prénom sont entourés de guillemets (signe ").
    La date est donnée au format jj/mm/aaaa (jour avec deux chiffres, mois avec deux chiffres, années avec 4 chiffres, séparés par une barre oblique).
    - Le programme doit afficher les trois données sur trois lignes différentes. Le nom et le prénom doivent être affichés sans les guillemets. La date doit être affichée en créant un objet de type Date représentant cette date et en appelant la méthode toString sur cet objet.

    Exemple de ligne au format CSV:
    "Hugo";"Victor";26/02/1802
    Exemple d'exécution du programme:
    > java CSV
    Entrez la ligne CSV: "Hugo";"Victor";26/02/1802
    Hugo
    Victor
    Fri Feb 26 00:00:00 CET 1802

    Le code suivant permet de lire une chaîne de caractère au clavier (l'usage de la classe Scanner est expliquée dans une séquence de la semaine 3, en attendant, vous pouvez utilisez ce fragment de code tel quel):
    String ligneCSV;
    Scanner sc = new Scanner(System.in); // creation d'un objet scanner
    ligneCSV = sc.nextLine(); // lecture d'une ligne et sauvegarde dans ligneCSV

    Votre programme ne doit contenir qu'une seule classe dans un seul fichier java. Cette classe doit contenir une méthode main qui réalise exactement le travail demandé sans aucune autre entrée qu'une ligne de texte au format CSV.
    Si la ligne ne contient pas les trois informations sous la forme attendue, le programme doit afficher le message Erreur de format. Il ne doit jamais s'arrêter avec un exception.

    Je ne sais pas comment obliger l'internaute à saisir les info sous la forme demandée.

    Voici mon code:

    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
    import java.util.Scanner;
    import java.util.Date; 
     
    public class Nom {
      public static void main(String[]args){ 
        java.util.Scanner entree =   new java.util.Scanner(System.in);
        try{   
          //données entrées au clavier
          String LigneCSV;
          Scanner sc = new Scanner(System.in);
          LigneCSV = sc.nextLine();
     
     
          //découpage : methode split
          String[]tabLigne = LigneCSV.split(";");
     
          //methode replace: remplace les ""
          tabLigne[0]= tabLigne[0].replace("\"","");
          tabLigne[1]= tabLigne[1].replace("\"","");
          tabLigne[2] = tabLigne[2].replace("/"," ");
     
          //methode trim: enleve les espaces au début et à la fin
          tabLigne[0]= tabLigne[0].trim();
          tabLigne[1]= tabLigne[1].trim();
          tabLigne[2] = tabLigne[2].trim();
     
          //methode substring pour extraire jour, mois, année de la date.
          String resDay = tabLigne[2].substring(0,2);
          String resMonth = tabLigne[2].substring(3,5);
          String resYear = tabLigne[2].substring(6,10);
     
     
          //methode concat pour concacténer mois jour année
          String resMonthDay = resMonth.concat("/"+resDay); 
          String naissanceEnt = resMonthDay.concat("/"+resYear);
     
          //traitement de la date pour qu'elle s'affiche en string
          Date naissance = new Date (naissanceEnt);
          String st = naissance.toString();
     
          //affichage
          System.out.println(tabLigne[0]); 
          System.out.println(tabLigne[1]); 
          System.out.println(naissance); 
     
        }catch(Exception e){
          System.out.println( "Erreur de format");
        }
     
      }
    }
    Par avance, je vous remercie de votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 770
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 770
    Points : 19 969
    Points
    19 969

    Par défaut

    Hello,

    Citation Envoyé par douxbi40 Voir le message
    Je ne sais pas comment obliger l'internaute à saisir les info sous la forme demandée.
    pas grave, personne ne te demande d'obliger qui que ce soit à quoi que ce soit.

    L'énoncé te dit de supposer que la personne va taper une ligne comme il faut, comme dans l'exemple.
    Et cette ligne dont on te dit que oui elle est bien tapée, ne te pose pas de question, il faut que tu la traites comme dans l'exemple.

    Ton travail c'est de traiter les lignes, pas de vérifier si elles sont correctes et encore moins d'obliger qu'elles le soient.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2019
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Mais si l'internaute tape Victor; Hugo; 28 02 1802, je n'ai aucun message d'erreur format, alors que je devrais en avoir un.
    C'est la dessus que je bloque.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 770
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 770
    Points : 19 969
    Points
    19 969

    Par défaut

    Ah pardon j'ai mal lu. En effet. Donc il ne s'agit pas d'obliger qui que ce soit à quoi que ce soit, mais il s'agit bien de vérifier que le format est bon.

    On pourrait songer à utiliser les regex, mais ça marche pas terrible avec les noms entre guillemets.
    Du coup il faut simplement y aller à l'évidence :

    - Vérifier que le premier caractère est un guillemet
    - Lire jusqu'à trouver un autre guilllemet. S'il n'y en a pas, le format est mauvais.
    - Vérifier qu'après le second guillemet, il y a un point-virgule
    - Vérifier qu'après, il y a un guillemet
    - ... et ainsi de suite
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2019
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Merci beaucoup. Je vais essayer ça. Je n'y avais pas pensé.
    Je te tiens au courant. ;-)
    Encore merci.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2019
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    Voilà ça fonctionne.
    J'ai rajouté une condition et une méthode contains. ;-)

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

Discussions similaires

  1. Suppression Ligne si police rouge avec format mise en forme conditionnelle
    Par apetitjean dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/06/2016, 15h49
  2. Réponses: 5
    Dernier message: 16/06/2014, 02h29
  3. Réponses: 3
    Dernier message: 02/04/2014, 08h04
  4. Seulement les lignes entres 2 expressions ( Avec / )
    Par Ivelios dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 16/04/2013, 17h53
  5. [Eclipse 3][Format Source] Sauts de ligne entre attributs
    Par sylvain_2020 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/08/2004, 16h04

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