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 :

Utilisation de la classe Scanner


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut Utilisation de la classe Scanner
    Salut à tous,

    je viens de découvrir la classe Scanner et j'essaie de l'utiliser pour lire un fichier .CSV.
    voici une ligne du fichier en entrée :

    1,2545,1152,231,17/03/2000 04:00,G,0,-78.391,-9.454,1, 0.1,270,AGUILA REAL ,AGUILAREAL, 1, 4 ,4639.577,567.24,NA,NA,NA,NA
    et voici le code de ma classe :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    public class LireFichier {
     
        public LireFichier(String nomFichier) throws IOException{
     
            Scanner sc;
            PrintWriter pw = new PrintWriter(new FileWriter("test.txt"));
     
            try {
     
                sc = new Scanner(new File(nomFichier)).useDelimiter(",");
                boolean eof = false;
                while (!eof) {
     
                    //row names
                    System.out.println(sc.next());
                    System.out.println(sc.next());
                    System.out.println(sc.next());
                    //numero emb
                    System.out.println(sc.next());
                    //Datacion
                    pw.print(sc.next());
                    pw.print(",");
                    //clase
                    System.out.println(sc.next());
                    //tipo rec
                    System.out.println(sc.next());
                    //X
                    pw.write(sc.next());
                    pw.print(",");
                    //Y
                    pw.print(sc.next());
                    pw.print(",");
                    //NUMERO.ZON
                    System.out.println(sc.next());
                    //VELOCIDAD
                    pw.print(sc.next());
                    pw.print(",");
                    //RUMBO
                    pw.print(sc.next());
                    pw.print(",");
                    //EMBARCACIO
                    System.out.println(sc.next());
                    //BoatNAbb
                    System.out.println(sc.next());
                    //ref.voyage
                    System.out.println(sc.next());
                    //hora
                    pw.print(sc.next());
                    pw.print(",");
                    //Longmn
                    System.out.println(sc.next());
                    //Latmn
                    System.out.println(sc.next());
                    //duracion
                    System.out.println(sc.next());
                    //cambio.vel
                    String tmp = sc.next();
                    pw.print(tmp);
                    System.out.println("cambio.vel"+tmp);
                    pw.print(",");
                    //distancia
                    String tmp2 = sc.next();
                    pw.print(tmp2);
                    System.out.println("distancia"+tmp2);
                    pw.print(",");
                    //cambio.rumbo
                    String tmp3 = sc.next();
                    pw.print(tmp3);
                    System.out.println(tmp3);
                    //pw.print("\n");
     
                }
                sc.close();
                pw.close();
            } catch (FileNotFoundException e) {
     
                e.printStackTrace();
     
            }
        }
    }

    à l'exécution, j'obtiens le message d'erreur suivant :

    [QUOTE]
    Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:838)
    at java.util.Scanner.next(Scanner.java:1347)
    at miseenformefichiersmatthieu.LireFichier.<init>(LireFichier.java:29)
    at miseenformefichiersmatthieu.Main.<init>(Main.java:17)
    at miseenformefichiersmatthieu.Main.main(Main.java:20)
    Java Result: 1[
    /QUOTE]

    Globalement, je cherche à extraire que certaines colonnes du fichier d'entrée et de les reconduire dans un fichier de sortie...peut-être que d'autres classes que Scanner sont plus adaptées à mon pb ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    En même temps, tu mets jamais eof à true...

  3. #3
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut gestion fin de fichier
    effectivement, mais même en rajoutant ceci en fin de boucle while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (!sc.hasNextLine()){
        eof = true;
    }
    j'obtiens toujours le mème message d'erreur !

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Il faut le faire à chaque sc.next() le sc.hasNext()...

    Sinon moi je ferais, pour être plus simple, un nextLine().split(";"), comme ça tu récupères tout dans un tableau...

  5. #5
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut split
    oui effectivement c'est beaucoup plus simple avec la fonction "split".
    merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2009, 20h31
  2. Utilisation de la classe Scanner sous Eclipse
    Par cadabricadabra dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 24/02/2008, 11h30
  3. Utilisation de la classe Scanner sous Eclipse
    Par cadabricadabra dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/10/2006, 15h48
  4. [SWT] Utilisation de la classe Tracker
    Par arN34 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 24/11/2004, 10h28
  5. Réponses: 2
    Dernier message: 18/05/2004, 14h12

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