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 :

Question sur la longueur d'une ligne avec un readLine()


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Question sur la longueur d'une ligne avec un readLine()
    Bonjour tout le monde,

    J'ai une question tout bête:

    J'ai un petit programme qui permet de lire, ligne par ligne, le contenu d'un fichier txt.

    Ce dernier enregistre la ligne active dans une variable.

    Ensuite, il lit la ligne et extrait les chiffres qui sont avant le séparateur ( exemple :

    ligne 1:

    4;5;56

    il extrait 4;

    il me reste ensuite 5;56

    là, quand je fais un System.out.println(ligne.length()) il me donne 3, est-ce par ce que la numérotation commence à zéro ?

    Voici le code en entier :

    Merci d'avance pour votre aide.

    beegees

    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
    import java.io.*;
    public class CorrectionParPhilippe
    {
    	// Faire fichier avec différents chiffres séparés par un ; comme ci dessous,
    	// p.ex : 12;4;7
    	public static void main(String[]args) throws IOException
    	{
    		int positionSeparateur;
    		String sNombre;
    		//String ligne="12;4;7";
    		String ligne="";
    		int nombre;
    		char separateur=';';
    		int longueur;
    		int somme=0;
    	//on donc besoin de trois choses pour lire dans un fichier :
    	//1) le filereader
    	//2) le bufferedReader
    	//3) close 
    	//attention :  on a besoin aussi d'un readLine(), ce readLine est une méthode
    	//du buffered
    	FileReader fic= new FileReader("C:\\somme.txt");
    	//Lecture de la premiere ligne
    	BufferedReader fichier=new BufferedReader(fic);
    	ligne=fichier.readLine();
    	System.out.println("Lecture du fichier :");
    	//tant que ligne (c'est à dire la ligne active du fichier txt) est différente
    	//de rien
    	while(ligne !=null)
    		{	
    		  //on donne la longueur de la ligne à la variable longueur
    			longueur=ligne.length();
    			//tant que longueur est supérieur à Zéro car :
    			//si j'ai cette ligne : 7;12;9 la longueur est de 6, quand j'aurais passé
    			//une première fois, on prend 7 et ; il nous reste alors 12;9, vue que l'on
    			//commence à zéro, on a encore 3 caractères (0,1,2,3 --> 12;9)
     
    			while(longueur>0)
    			{
    			positionSeparateur=ligne.indexOf(separateur);
    			if (positionSeparateur>0)
    			{
    			sNombre=ligne.substring(0,positionSeparateur);
    			ligne=ligne.substring(positionSeparateur+1);	
    			}
    			else
    			{
    				sNombre=ligne;
    				ligne="";
    			}
    			System.out.println(sNombre);
    			nombre=Integer.parseInt(sNombre);
    			somme+=nombre;
    			longueur=ligne.length();
    			System.out.println("la longueur " + longueur);
    			}
    			//Lecture de la ligne suivante
    			ligne=fichier.readLine();		
     
    		}
     
    		System.out.println("=================");
    		System.out.println("Total = "+somme);
    	fichier.close();
     
     
     
    	}
    }

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Je te conseille plutot de passer par String.split(), pour l'analyse de ta chaine.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 63
    Points
    63
    Par défaut
    ou un StringTokenizer

    si je me trompe pas, il te donne 3 car tu fait un "ligne=ligne.substring(positionSeparateur+1);" sur 5;56

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    C'est une erreur d'algo : dans ta boucle while tu affectes deux fois ligne :
    ligne=ligne.substring(positionSeparateur+1);
    et
    ligne=fichier.readLine();

    Pour lire ligne par ligne, je te conseille d'utiliser le code qui suit plutot que de lire la première et boucler sur les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String ligne=null;
    while((ligne=fichier.readLine())!=null){
       // La première ligne lue est la première de ton fichier.
       // Effectue ici les traitements sur ta ligne en rajoutant
       // éventuellement une boucle ( while(line.lenth()>0 ).
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Citation Envoyé par AliLoU`
    ou un StringTokenizer

    si je me trompe pas, il te donne 3 car tu fait un "ligne=ligne.substring(positionSeparateur+1);" sur 5;56
    Citation Envoyé par Javadoc
    StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
    __________________

  6. #6
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Sinon il y a la classe Scanner, qui me paraît très appropriée ici; moi je dis ça, je dis rien...

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Sanguko
    Je te conseille plutot de passer par String.split(), pour l'analyse de ta chaine.
    Bonjour,

    Je ne peux malheureusement pas pour l'instant passer par split car au cours on ne l'a pas encore appris.

    Merci quand même pour ta suggestion.

    beegees

  8. #8
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par iohack
    C'est une erreur d'algo : dans ta boucle while tu affectes deux fois ligne :
    ligne=ligne.substring(positionSeparateur+1);
    et
    ligne=fichier.readLine();

    Pour lire ligne par ligne, je te conseille d'utiliser le code qui suit plutot que de lire la première et boucler sur les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String ligne=null;
    while((ligne=fichier.readLine())!=null){
       // La première ligne lue est la première de ton fichier.
       // Effectue ici les traitements sur ta ligne en rajoutant
       // éventuellement une boucle ( while(line.lenth()>0 ).
    }
    Bonjour,

    Merci pour ta réponse.

    Pourrais-tu, à partir de mon code, me dire ce que je dois effecé ou adapté ?

    Pour l'instant, je ne peux pas utiliser une autre méthode vue que l'on a pas encore vue les méthodes citées dans les réponses au cours.

    Par contre, je vais quand même tester ce que tu me proposes.

    Merci d'avance pour ton aide.

    beegees

Discussions similaires

  1. [DisplayTag] suppression d'une ligne avec un lien sur une autre Servlet
    Par luffy2mars dans le forum Taglibs
    Réponses: 1
    Dernier message: 12/01/2010, 11h36
  2. Réponses: 3
    Dernier message: 17/05/2008, 14h39
  3. Question sur la longueur d'une chaîne et les label
    Par AsmCode dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/01/2008, 16h41
  4. Réponses: 18
    Dernier message: 23/06/2007, 01h17
  5. [Débutant] Aligner deux divs sur une ligne avec inline
    Par Braz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/03/2006, 10h52

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