Java ReadLine() fin de fichier

[Résolu/Fermé]
Signaler
-
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
-
Bonjour,

J'ai un soucis en Java, je veux savoir par combien de lignes vide se termine mon fichier
Avec cette solution ça marche sauf quand il n'y a qu'une ou aucune ligne vide, mon "i" est de 1. Il ne fais pas la différence entre les 2.

ex fichier: >>toto autre Fichier: >>Toto
>>Tata >>Tata
>>

=> même résulat de 1.

mon code:
BufferedReader inputFile = new BufferedReader(new FileReader(file));

myLine = inputFile.readLine();
i=0;

while (myLine != null ){
if (myLine.equals("")){
i++;
}else{
i=0;
}

myLine = inputFile.readLine();
}
i++;


Merci d'avance :)

16 réponses

Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 356
Bonjour banbino

goulamass, excuse moi d'intervenir dans ta discussion, mais je pense qu'en Java, la fonction ReadLine supprime les caractères
\n et \r


Banbino, je pense que le code correct devrait être le suivant
BufferedReader inputFile = new BufferedReader(new FileReader(file));

myLine = inputFile.readLine();
i=0;

while (myLine != null )
{
   if (myLine.equals(""))
  {
    i++;
  }
}

myLine = inputFile.readLine();
}

car tu remets ta variable i à zéro à chaque fois qu'une ligne n'est pas vide.
A plus
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42584 internautes nous ont dit merci ce mois-ci

nan dans ce cas la, la variable "i" contiendra tous les retours charriot du fichier, je veux que ceux de fin de fichier après le texte.
Merci quand même
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Tu n'as pas à t'excuser.

Au contraire ta participation est la bienvenue.

Surtout que tu proposes une solution toute simple à laquelle je n'ai pas pensé et suis partie direct dans quelque chose de trop farfelu.

Bon à ma décharge, je fais du java sur BlackBerry toute la journée et le choses simples comme celles là me passent parfois loin au dessus de la tête.

Donc mes excuses à banbino a qui j'aurai finalement fait perdre du tps.

C'était tellement bête que je n'ai pas fait attention....

Quoique ton code ne prend pas en compte le fait que se soit uniquement les dernières lignes.

Là il comptera toutes les lignes vides du fichiers.

C'est pour cela que la remise à 0 permet d'être sur de partir bien à partir du fichier.
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Hum en fait c'est parce qu'il fait quand même une itération de la boucle while

Donc ton i sera toujours à 1 au mins.

A la limite fait i-- à la fin plutôt.
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Ah en fait je pense que le prog considère "" et null comme la même chose (ce qui est logique)

Ton prog marche quand il y a pls lignes puisque dans ce cas le fichier n'est pas terminé.
ouai voila c'est ca le problème mais j'arrive pas à contourner le problème
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Mais quel est l'intérêt d'un tel programme???
J'ai 2 fichiers différents et l'un doit impérativement terminer avec le même nombre de retour charriot que l'autre.
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176 > banbino
Si tu es libre recrées tes deux fichiers sans retour chariot à la fin.

Sinon je vais réfléchir et je te tiens au courant
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Ah une idée.

Plutôt que de tester sur "" fais le sur "\n".

Ca devrait passer puisque \n est le retour chariot
Nan il ne trouve pas les "\n" mais c'était une bonne idée! Et sinon je peux pas recréer les fichiers, problème de cvs après...
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
En fait j'étais pas loin

Fais le avec \r qi lui est le retour chariot alors que \n est le saut de ligne.

La nuance est certes infimes mais bien présente.
Ça marche pas non plus :(
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Ca te renvoit quoi???
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Sinon tente "\r\n"

On finira bien par trouver ^^
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Ou encore "[\n\r]+"

Je suis sûr que c'est une combinaison comme celle là
Nan toujours pas! C'est galère ce problème!

Et avec l'objet RandomAccessFile, ya peut être moyen?
Merci les gars de m'aider mais c'est vraiment chiant comme problème!
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Oui surtout qu'il a raison dans le sens ou ReadLine supprime le retour chariot....
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 356
Bonjour,

As-tu déjà essayé avec le code suivant
BufferedReader inputFile = new BufferedReader(new FileReader(file));

myLine = inputFile.readLine();
i=0;

while (myLine != null )
{
  if (myLine.length() == 0)
  {
    i++;
  }
  else
  {
    i=0;
  }
  myLine = inputFile.readLine();
} 


Et sans rajouter le
i++;
à la fin comme l'avait indiquer goulamass dans sa première intervention

A plus
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Décidément on dirait que tu m'en veux.

le i++ de la fin ce n'est pas moi qui l'ai mis.

Quand à la taille je sais pas.

Cela peut marcher selon comment il considère le retour chariot
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 356 >
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010

Bonjour,

Mais non, c'est juste le contraire, je faisais référence à
Avec ton i++ à la fin il est sûr que ta valeur min sera 1.

Tu devrais juste rajouter à la place :

if( i > 0)
i++

Comme cela il laissera 0 si il y a pas de lignes


A plus
désolé ca change rien non plus :(
Merci de vos efforts les gars, mais ca me parait ompossible ce problème!!!

Je suis en train d'essayer avec la méthode seek de RandomAcessFile mais je maitrise pas trop.
J'ai trouvé !!!!!!!

En faite, j'ai lu caractère par caractère tous le fichier. J'ai remarqué que le tout dernier caractère d'un fichier affichait '?' dans ma console. J'ai donc utilisé la méthode isDefined(c) de Character et c'est bon! Espérons qu'il n'y a pas d'autre charactères non définis dans le fichier...

code:

FileReader fr = new FileReader (theFile);

int i=0;
int j=0;
char c;

try{
while( i != -1 ) {

i=inputFile.read(); // on lit le caractère et on note son code dans i
c=(char) i;

if ((c == '\n' || !Character.isDefined(c))){
j++;

}else{
j=0;
}
}
}catch (IOException e){
System.err.println("IOException : "+e.getMessage());
}


Voila, merci tous le monde quand même :)
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Effectivement.

Bravo à toi d'avoir trouver. ^^
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 356
Bonjour,

C'est très bien d'avoir trouvé la solution et encore mieux de l'avoir communiquée afin que d'autres puissent l'utiliser.

A plus
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Bonjour,

Avec ton i++ à la fin il est sûr que ta valeur min sera 1.

Tu devrais juste rajouter à la place :

if( i > 0)
i++

Comme cela il laissera 0 si il y a pas de lignes

Edit => Hum attend faut que je réfléchisse un peu. Je crois que j'ai dit des conneries
Ca change pas mon problème,
ca ne marche qu'a partir de 2 lignes vides comme avant

Dans ce cas ca renvoi 0:

un fichier:
>>ToTo
>>Tata
>>

autre fichier:
>>ToTo
>>Tata