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

Développement de jobs Discussion :

java.util.Scanner hasNext() false


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut java.util.Scanner hasNext() false
    Bonjour, j'utilise la version 5.6.1 du studio, et j'ai un souci avec un traitement dans un composant tJavaFlex:

    J'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    final File testFile = new File("C:/blabla.csv");
    final Scanner scanner = new Scanner(testFile);
    while (scanner.hasNext()) {
    	System.out.println("NL");
    }
    Ce code n'affiche rien => aucune ligne n'est trouvée dans le fichier. Or, ce fichier n'est pas vide.
    Pour preuve, en créant une classe complètement à part, avec juste un main qui contient ce code, j'ai bien les print qui s'affichent.

    Sachant que ces 2 codes sont lancés sur ma JVM locale, je ne comprends pas pourquoi ça ne fonctionne pas sur Talend.
    L'un d'entre vous aurait-il une idée?

    Merci de votre aide!

  2. #2
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    J'ai pas encore utilisé TOS_DI6
    Mais peut-être que les Sysout ne s'affiche pas dedans.


    Essaye avec des vrais log Talend.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    resumeUtil.addLog("USER_DEF_LOG", "NODE:tJavaFlex_1", "", Thread.currentThread().getId() + "", "WARN","","NL","", "");
    talendLogs_LOGS.addMessage("tJavaFlex", "tJavaFlex_1", 4, "NL", 42);
    talendLogs_LOGSProcess(globalMap);
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Hello, merci pour la réponse rapide!

    Oui les print standards s'affichent correctement, pas de souci là-dessus.
    Entre temps j'ai testé autre chose et j'ai un autre comportement très étrange: j'ai remplacé mon "blabla.csv" qui est un fichier client assez volumineux par un simple "test.txt" que j'ai créé à la main, avec 2 lignes de texte.
    Quand je fais un Scanner de ce fichier, Talend part en boucle infinie sur les print... Alors que dans ma classe "main" à part, il m'affiche bien 2 print.

    Je ne comprends pas le comportement de Scanner dans Talend, surtout que théoriquement il tape dans la classe de ma JVM...

  4. #4
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    A aucun momment tu fais un
    Je veux dire part là, que tu testes si il y a un suivant, mais tu récupères jamais le suivant. Je suivant est toujours le même! Il y a donc toujours un suivant!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final File testFile = new File("C:/blabla.csv");
    final Scanner scanner = new Scanner(testFile);
    while (scanner.hasNext()) {
            String next = scanner.next();
    	System.out.println(next);
    }
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Ah oui, n'importe quoi, bien sûr!
    En plus je le fais dans mon fichier "main", c'est pour ça que ça m'affiche bien 2 print.

    Bon ben je crois que c'est mon fichier csv qui ne plait pas au Scanner dans Talend, parce que mon fichier .txt m'affiche bien 2 lignes à la fois dans le "main" et dans Talend.
    L'investigation continue...

  6. #6
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    Question Hors Sujet :

    Pourquoi utilises-tu un Scanner en dur pour lire ton CSV?
    un tFileInputDelimited ça sert à ça!

    Revenons au sujet?
    Essaye de forcer le delimiter de ton scanner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanner.useDelimiter(tonDelimiter)
    Ou log dans Talend et dans ton main la valeur de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanner.delimiter().pattern()
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Effectivement c'est vrai qu'il existe des composants tout faits pour lire du CSV, mais j'ai déjà une librairie qui fait tous les traitements voulus, je n'ai qu'à l'appeler depuis Talend; c'est dans cette librairie qu'il y a le fameux Scanner qui pose souci dans Talend, et pas en ligne de commande.

    J'ai fini par trouver le problème (mais pas l'explication): mon CSV est encodé en ANSI, du coup si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    final Scanner scanner = new Scanner(testFile, "ISO-8859-6");
    ça fonctionne correctement dans Talend.

    Je ne sais pas pourquoi je n'ai pas besoin de préciser l'encodage quand je lance ma lib en ligne de commande.
    Bref c'est résolu!

    Et merci de ton aide et de tes commentaires!

  8. #8
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    Parseque ton main était écris en ISO, et exécuté en ISO, et Talend exécute en UTF-8 surement
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Justement, je fais super attention à ce que tout le code soit en UTF-8, compilé en UTF-8 (grâce à Maven). Je ne pense pas avoir de problème de ce côté-là, c'est vérifié régulièrement.
    C'est toujours galère ces problèmes d'encodage, et je crois que je viens de me faire avoir une fois de plus

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

Discussions similaires

  1. Problème avec java.util.Scanner.
    Par Andarus dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2012, 11h54
  2. Problème avec java.util.Scanner
    Par fab56 dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 16/09/2009, 21h25
  3. pb scanner java.util.InputMismatchException
    Par flora806 dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2007, 18h27
  4. probleme avec java.util.Scanner
    Par d-a-v-e dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/05/2006, 22h08
  5. Réponses: 4
    Dernier message: 06/02/2004, 16h23

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