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 :

Comment lire plusieurs lignes à l'écran


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut Comment lire plusieurs lignes à l'écran
    Bonjour,
    je veux écrire à l'écran "011010001
    011001010
    011011000
    011011000
    011011110
    011000101
    "

    et le lire dans une chaine et après chaque ligne j'ajoute '\n'.
    mon problème est que le prog, quand il arrive à la dernière ligne qui est vide, reste en attente d'une entrée et exactement à cette commande "choix += sEntréeTampon.readLine();".

    NB/ j'ai fait "while (choix != null)" car j'ai cru que la variable choix sera vide quand readLine() ne retourne rien!

    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
    public static String lectureEcraan() {
    		// pour récupérer les données user et les mettre en mémoire
    		InputStreamReader sEntréeIn = new InputStreamReader(System.in);
    		BufferedReader sEntréeTampon = new BufferedReader(sEntréeIn);
     
    		String choix = null;
     
    		try {
    			choix = sEntréeTampon.readLine();
     
    			while (choix != null) {
    				choix += '\n';
    				choix += sEntréeTampon.readLine();
    			}
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		return choix;
    	}

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 612
    Points
    21 612
    Par défaut
    readLine ne retourne null que quand la lecture est terminée. Ce n'est pas le cas ici, ici c'est juste une ligne de longueur zéro, et qui ne termine rien du tout.

    readLine retourne donc une chaîne de longueur zéro : ""
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut Comment lire plusieurs lignes à l'écran
    merci pour l'éclaircissement mais comment ferais je pour que ma boucle arrive à sa fin et passe au reste du code car je veux lire toute cette information "011010001
    011001010
    011011000
    011011000
    011011110
    011000101
    "
    et la rendre "011010001\n011001010\n011011000\n011011000\n011011110\n011000101\n" et mon programme fait ça mais quand il arrive à la dernière ligne, qui est vide, reste en attente?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 612
    Points
    21 612
    Par défaut
    Eh bien tu fais en sorte qu'il cesse de rester en attente quand il tombe sur une ligne vide.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    oui c'est ce que j'ai dans la tête mais comment faire ça dans mon code?

  6. #6
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((choix != null) && ("".equals(choix)==false))
    si tu n'autorise pas les lignes vides dans ton fichier. Si tu veux les autoriser, il faut ajouter un if dans ton while qui ne fait le traitement que si la ligne est non vide.

  7. #7
    En attente de confirmation mail
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((choix != null) && ("".equals(choix)==false))
    si tu n'autorise pas les lignes vides dans ton fichier. Si tu veux les autoriser, il faut ajouter un if dans ton while qui ne fait le traitement que si la ligne est non vide.
    Vous pouvez utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(null != choix && choix.isEmpty()) {..;}
    qui est plus performant que "".equals(..) .

    et aussi,
    avant le while() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuilder sb = new StringBuilder();
    dans le while() :

    après le while() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(sb.tostring());
    C'est une des recommandations de Joshua Bloch dans Extreme Java

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2008
    Messages : 73
    Points : 195
    Points
    195
    Par défaut
    D'où sort cette méthode String.isEmpty() ??? Pourquoi pas à la place un bon :
    Et puis, il manque une négation à ta proposition, puisqu'on cherche un équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("".equals(choix)==false)
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (null != choix && choix.length() != 0) { ...; }

  9. #9
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par MonsieurSmith Voir le message
    D'où sort cette méthode String.isEmpty() ???
    C'est apparu avec Java 1.6. Mais c'est vrai que j'ai pas le reflexe de l'utiliser...


    Citation Envoyé par MonsieurSmith Voir le message
    C'est ce que fait String.isEmpty()

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    d'abord merci à vous tous pour vos efforts.
    Malheureusement ça fonctionne encore pas ;(
    quand je copie cette chaine comme elle est "011010001
    011001010
    011011000
    011011000
    011011110
    011000101
    " dans la console et quand je fais appelle à ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static void main(String[] args) {
    		 String sEntrée = lectureEcraan();
    le programme lit chaque ligne comme il faut et ajoute un '\n' avant chacune comme il faut aussi mais quand il arrive à la dernière ligne qui est vide (retour chariot) il s'arrête et ne revient pas à while!!

  11. #11
    En attente de confirmation mail
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par guizaniseifislam Voir le message
    void main(String[] args) {
    String sEntrée = lectureEcraan();
    [/code] le programme lit chaque ligne comme il faut et ajoute un '\n' avant chacune comme il faut aussi mais quand il arrive à la dernière ligne qui est vide (retour chariot) il s'arrête et ne revient pas à while!!
    Pour que le while() s'arrête, il faut que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix == null ou choix == ""
    si le while() est dans lectureEcraan(), et qu'après le while() il n'y a rien, sEntrée est initialisé dans main().
    Essayez de vérifier avec System.out.println(sEntrée);

    Bien que cela ne gène pas pour les noms de variable, évitez d'employer les accents (interdits dans le nom des classes) qui peuvent bloquer l'exécution des programmes lorsque vous exécutez votre application sous un autre code de localisation (UTF-8, ISO-8859-15, ...)

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 612
    Points
    21 612
    Par défaut
    Citation Envoyé par guizaniseifislam Voir le message
    le programme lit chaque ligne comme il faut et ajoute un '\n' avant chacune comme il faut aussi mais quand il arrive à la dernière ligne qui est vide (retour chariot) il s'arrête et ne revient pas à while!!
    Euh, oui, c'est un peu le but. S'il revient dans le while, il refait une lecture de readLine(), et donc il se remet en attente. Je croyais que tu voulais qu'il ne reste pas en attente ?
    Donc tu veux qu'il quitte le while, c'est logique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    désolé pour le retard, j'ai été occupé par d'autres travaux.
    et oui c ça, je veux que mon prog quitte le while à la fin, veuillez essayer la méthode et mettre, pour test, ma chaine de bits comme elle est avec le retour chariot après chaque séquence de 9 bits et un retour chariot à la fin et vous allez voir que le prog s'arrête à la dernière ligne vide et reste en attente

  14. #14
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Poste le code qui tu utilises, il semble ne pas etre celui qui t'a été conseillé.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    ok j'ai donc ma fonction
    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
    public static String lectureEcran() {
    		InputStreamReader sEntreeIn = new InputStreamReader(System.in);
    		BufferedReader sEntreeTampon = new BufferedReader(sEntreeIn);
     
    		String choix = null;
     
    		try {
    			choix = sEntreeTampon.readLine();
     
    			while (null != choix && choix.length() != 0) {
    				choix += '\n';
    				choix += sEntreeTampon.readLine();
    			}
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		return choix;
    	}
    je fait appel ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void main(String[] args) {
    		String sEntree = lectureEcran();
     
    for (i = 0; i < sEntree.length(); i++) {
    			if (sEntree.charAt(i) == '\n') {
    				nbTotLg++;//nombre total des lignes binaires
    			}
    		}
    }
    pour le test, je copie toute cette chaine dans la partie "Console" d'Eclipse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    011010001
    011001010
    011011000
    011011000
    011011110
    011000101
    et j'exécute.
    NB/ il y a un retour chariot après chaque ligne binaire.
    ==> le programme doit lire les 6 lignes et après quitter la boucle (quitter la boucle car il y a plus de ligne mais seulement '\n' à la fin)

  16. #16
    En attente de confirmation mail
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Points : 40
    Points
    40
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
      final static BufferedReader sEntreeTampon = new BufferedReader(
            new InputStreamReader(System.in));
     
        public static String lectureEcran() {
            try {
                System.out.print("Entrée: ");
                return sEntreeTampon.readLine();
            } catch (final IOException e) {
                System.out.println(e.getMessage());
            }
            return null;
        }
     
        /*** @param args */
        public static void main(final String[] args) {
            // StringBuilder  est préférable a String+=
            final StringBuilder sb = new StringBuilder();
            while (true) { // boucle sans fin
                final String choix = lectureEcran();
                if (null == choix || choix.isEmpty()) {
                    break; // sortie de boucle
                }
                sb.append(choix);
                sb.append("\n");
            }
            System.out.println(sb);
            // StringTokenizer analyse n'importe qu'elle chaîne
            final StringTokenizer st = new StringTokenizer(sb.toString(), "\n");
            System.out.println(st.countTokens());
        }

  17. #17
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Bonjour,

    Le probleme est que tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix += sEntreeTampon.readLine();
    Donc a chaque fois, tu ajoutes la nouvelle entrée.
    Et comme c'est la variable choix qui est testée, elle n'est jamais vide ou null...

  18. #18
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    ah oui cà c vrai, je vais la corriger mais n'oublions pas que dans tt les cas le prog quand il arrive à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix += sEntreeTampon.readLine();
    de la dernière ligne, qui est vide, reste en attente et ne passe pas pour tester la condition de while

  19. #19
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    pour "cylere": je veux lire toutes les lignes binaires en même temps et les affecter à ma variable dans le prog main!

  20. #20
    En attente de confirmation mail
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Pas très claire votre demande.
    Si vous recevez une ligne composée de binaires séparés par des retours lignes, vous la présentez directement à StringTokenizer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            String chaîneReçue = maMéthodeDeLecture();
            System.out.println(chaîneReçue);
            // StringTokenizer ne traite pas les 'null' ou "", le décompte sera correct
            final StringTokenizer st = new StringTokenizer(chaîneReçue, "\n");
            System.out.println(st.countTokens());
    Sinon vous pouvez utiliser Scanner en remplacement de BufferedReader pour gérer vos entrées, ou y mettre directement votre ligne à traiter comme dans cet exemple en remplacement de StringTokenizer

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB]Comment lire plusieurs videos simultanément
    Par fablebab dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/04/2006, 11h22
  2. lire plusieurs lignes avec fgetc
    Par Mousk dans le forum C
    Réponses: 7
    Dernier message: 25/03/2006, 18h24
  3. Réponses: 5
    Dernier message: 27/02/2006, 09h14
  4. Comment insérer plusieurs lignes en incrémentant la pk ?
    Par PamelaGeek dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/02/2006, 13h39
  5. Comment lire plusieurs lignesd'un fichier ?
    Par BECHE dans le forum Langage
    Réponses: 8
    Dernier message: 06/01/2006, 20h12

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