InputStreamReader et lecture de fichiers ligne par ligne

InputStreamReader et lecture de fichiers ligne par ligne - Java - Programmation

Marsh Posté le 13-12-2005 à 21:04:26    

Je souhaiterais lire un fichier texte tout balot (mais contenant des caractères accentués) ligne par ligne (séparateur = line feed + carriage return). Jusque là, tout va bien. Mes souvenirs du Basic qui torchait cela en une instruction m'ont plongé dans une confiance pour le moins trompeuse.
 
Je lis quelques docs java sur le sujet. Elle me disent, grosso-modo : "Mec, c'est de la luge ! Le Basic : enfoncé, tu vas voir ! Utilise un objet de la classe InputStreamReader puis mets lui une baffe avec un objet LineNumberReader. Trop simple !!!"
 
Je m'exécute :
      InputStreamReader flog = new InputStreamReader(new FileInputStream(NomLog),"IBM437" );
      LineNumberReader llog = new LineNumberReader(flog);
et plus loin dans le code :
      while ((ligne = llog.readLine()) != null) {
 
N'obtenant pas les résultats escomptés, je fais un System.out.println(ligne) : HORREUR : entre tous les caractères sont intercalés des espaces. Sans parler des caractères accentués totalement hiéroglyphiques.
 
Je cherche pourquoi et me rends compte qu'il existe la notion de Charset qui encode des données.
 
MAIS JE M'EN TAPE DE CETTE C.... JE VEUX QUE MES LIGNES, MES CARACTERES SOIENT LUS TELS QU'IL SONT DANS CE P&#%@ DE FICHIER.
 
C'est pourtant pas compliqué ! Je trouve, après 2 heures de recherches que UFT-16 supprime les espaces (ouf !), mais j'ai toujours du hiéroglyphes.
 
Ma question est : Y a pas plus simple ?
Ma 2ème question est : Sinon (je reste pessimiste), comment qu'on fait ?
 
Merci d'avance !!!!

Reply

Marsh Posté le 13-12-2005 à 21:04:26   

Reply

Marsh Posté le 13-12-2005 à 22:23:47    

Reply

Marsh Posté le 13-12-2005 à 22:34:00    

souk a écrit :

"IBM437" ? [:pingouino]


 
pas mieux [:pingouino] c'est quoi ce machin ?  
 
edit2 : a ben c'est la charset...jamais utilise ca moi...
 
Sinon perso j'utilise

Code :
  1. FileInputStream nomLogique=new FileInputStream (nomFichier);
  2. InputStreamReader ligne = new InputStreamReader (nomLogique);
  3. BufferedReader bufferLigne = new BufferedReader (ligne);


et ca marche ca met pas d'espaces ni rien...par contre je viens de verifier et ca m'affiche pas les é, è etc...
Dommage ca...[:klem3i1]
Vais me penchationner sur la question...


Message édité par gocho le 13-12-2005 à 22:48:58
Reply

Marsh Posté le 14-12-2005 à 12:05:13    

Merci pour ta proposition. je vais vérifier...
 
Pour les hiéroglyphes, je me demande si la fenêtre "System" n'aurait pas un jeu de caractères différent, genre ASCII alors que Windows, donc le programme java, travaillerait en ANSI.
 
Quel cirque !! Pour lever l'ambiguité, je vais afficher dans une zone de texte au lieu de la fenêtre system...
 
Je vous tient au courant !
 
PS : IBM437 : espaces intercalés, IBM850 aussi... :-(

Reply

Marsh Posté le 16-12-2005 à 05:34:37    

(oui, c'est la console qui merdoie, faut apprendre à utiliser un debugger, plutot)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-12-2005 à 18:36:38    

Je confirme : Dans des zones de texte, il n'y plus de caractères bizzaroïdes. Mais lors du traitement des lignes lues, tout ce qui n'est pas lettres et chiffres est totalement altéré... J'ai fait une petite boucle qui remet les bons caractères.
 
Avec ce bazar que j'ajoute, tout marche bien maintenant.
 
No problemo, le debugger. Il suffirait juste que j'installe un super IDE genre Eclipse...
 
 
 
Merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed