Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3048 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [resolu] Chaine de charactéres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[resolu] Chaine de charactéres

n°1767365
kiooik
Posté le 31-07-2008 à 16:30:22  profilanswer
 

Bonjour a tous,
 
J'aimerai savoir comment faire pour saisir une phrase ( par exemple: "bonjour tout le monde" ) et ensuite l'a stocker dans un fichier binaire....?


Message édité par kiooik le 01-08-2008 à 14:31:54
mood
Publicité
Posté le 31-07-2008 à 16:30:22  profilanswer
 

n°1767481
Taz
bisounours-codeur
Posté le 31-07-2008 à 20:42:17  profilanswer
 

bah tu la lis et ensuite tu ouvres un fichier en mode binaire et tu écris les octets de ta String. Il est où ton programme ?

n°1767497
kiooik
Posté le 31-07-2008 à 21:19:19  profilanswer
 

oui mais ca ne fonctionne pas....je l'a lis, je l'écris ds mon fichier binaire mais qd j'essaye de l'a lire a partir du fichier, ca n'affiche que le premier mot...

n°1767499
Taz
bisounours-codeur
Posté le 31-07-2008 à 21:20:35  profilanswer
 

et ton code il est où ?

n°1767523
kiooik
Posté le 31-07-2008 à 22:13:50  profilanswer
 

ma méthode pour écrire dans le fichier :
 
public void ajout() throws IOException
    {  
         
      DataOutputStream fw = new DataOutputStream(new FileOutputStream ("Voiture",true));
     fw.writeInt(a);
     fw.writeUTF(b);
     fw.writeUTF(c);
     fw.writeInt(d);
     fw.writeUTF(e);
     fw.writeInt(f);
     fw.writeUTF(g);
     fw.writeUTF(h);
     fw.writeUTF(i);
     fw.writeInt(j);
     fw.writeUTF(k);
     fw.writeInt(l);
      fw.close();
}
 
ma méthode pour lire:
 
public void affiche()  throws IOException
          {
           DataInputStream entree = new DataInputStream(new FileInputStream ("Voiture" ));
           
           boolean eof = false;
       
           while(!eof )
           {  
             
             
             
             try
             {            
                         System.out.println(entree.readInt());
                         System.out.println(entree.readUTF());
                           System.out.println(entree.readUTF());
                           System.out.println(entree.readInt());
                           System.out.println(entree.readUTF());
                           System.out.println(entree.readInt());
                           System.out.println(entree.readUTF());
                           System.out.println(entree.readUTF());
                           System.out.println(entree.readUTF());
                           System.out.println(entree.readInt());
                           System.out.println(entree.readUTF());
                           System.out.println(entree.readInt());
               }
             catch(EOFException e)
             {
              eof = true;
             }
             
             
           }  
            entree.close();
          }

n°1767539
MagicBuzz
Posté le 31-07-2008 à 22:46:55  profilanswer
 

Je dirais que là tu écrits une structure dans un fichier.
 
Et à partir de là, pour repérer quand une chaîne se termine et qu'on passe à la suivante, c'est chaud.
 
Donc à mon avis tu dois écrire ta chaîne "paddée" vers la droite avec des espaces de façon à toujours faire la même taille, et relire le nombre exact de caractères enregistrées, puis en trimant la chaîne obtenue.
 
A moins que Java propose des méthodes un peu plus glorieuses pour gérer des fichiers de type "record".
 
-- Edit : A priori j'ai rien dit. De ce que je comprends de la doc writeUTF enregistre le nombre de caractères que mesure la chaîne au début de l'écriture.


Message édité par MagicBuzz le 31-07-2008 à 22:55:01
n°1767559
kiooik
Posté le 01-08-2008 à 00:09:26  profilanswer
 

le plus simple serait peut-être d'enregistrer ma chaine dans un tableau de String et ensuite d'écrire les mots de ma chaine 1 par 1 dans le fichier a l'aide d'une boucle....
 
cela pourrait il fonctionner?

n°1767585
el muchach​o
Comfortably Numb
Posté le 01-08-2008 à 08:21:51  profilanswer
 

Non mais ce serait pas mal que tu nous dises ce que tu veux faire parce que entre "je veux écrire et lire une chaine" et le code que tu as posté, ça n'a pas grand chose à voir.
Visiblement, tu ne veux pas enregistrer une chaine, mais une structure de données. Dans ce cas une solution est de définir ta structure dans une classe, que tu sérialises.
http://java.sun.com/developer/tech [...] alization/
http://louis.cova.neuf.fr/blocs-notes/page6.html


Message édité par el muchacho le 01-08-2008 à 08:32:42

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1767779
kiooik
Posté le 01-08-2008 à 13:09:17  profilanswer
 

ok je vais essayer d'être plus clair...
 
en fait je voudrais saisir une phrase au clavier ( par exemple: bonjour tout le monde)
 
Ensuite, envoyer cette phrase à ma methode ajout() pour l'écrire ds mon fichier binaire
 
public void ajout() throws IOException
    {  
         
      DataOutputStream fw = new DataOutputStream(new FileOutputStream ("Voiture",true));
 
     fw.writeUTF(b);       //en supposant que "b" contient ma phrase
     
      fw.close();
}
 
une fois la phrase écrite dans le fichier, je voudrais l'a lire à partir de ma méthode affiche()  
 
public void affiche()  throws IOException
          {
           DataInputStream entree = new DataInputStream(new FileInputStream ("Voiture" ));
           
           boolean eof = false;
       
           while(!eof )
           {  
             
             
             
             try
             {            
             
               System.out.println(entree.readUTF());  //affichage  
              }
             catch(EOFException e)
             {
              eof = true;
             }
             
             
           }  
            entree.close();
          }
 
 
Mon probléme est que si je déclare la variable b en String et que je saisis une phrase, il n'y aura que le premier mot de ma phrase qui sera stockée dans b ....dans ce cas ci, b contiendra uniquement le mot "bonjour" et donc seul le mot "bonjour" sera écrit dans le fichier

n°1767792
el muchach​o
Comfortably Numb
Posté le 01-08-2008 à 13:31:12  profilanswer
 

Alors pour la lecture au clavier:
http://www.commentcamarche.net/for [...] er-en-java (google 10 s)

 

Ensuite, est-ce obligatoire d'écrire en UTF ?

Message cité 1 fois
Message édité par el muchacho le 01-08-2008 à 13:33:01

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
mood
Publicité
Posté le 01-08-2008 à 13:31:12  profilanswer
 

n°1767794
MagicBuzz
Posté le 01-08-2008 à 13:34:43  profilanswer
 

el muchacho a écrit :

Ensuite, est-ce obligatoire d'écrire en UTF ?


je pense que la relecture avec readUTF prends correctement en compte ce ushort qui est écrit en premier. enfin, j'espère. parceque sinon c'est une belle merde, m'enfin ça me paraît un peu gros ;)
 
du coup je ne vois pas d'inconvéniant à utiliser ce système...
 
en tout cas, le troncage de la chaîne ne peut pas venir de writeUTF ou readUTF. ou alors il y a un sérieux problème dans la JVM...


Message édité par MagicBuzz le 01-08-2008 à 13:35:49
n°1767797
el muchach​o
Comfortably Numb
Posté le 01-08-2008 à 13:37:46  profilanswer
 

Non mais si c'est juste pour lire une chaîne de caractères, un simple readline suffit.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1767798
MagicBuzz
Posté le 01-08-2008 à 13:42:48  profilanswer
 

ben non un readline lit une ligne dans un fichier texte :o
 
vu sa structure, il travaille plutôt dans un fichier binaire, donc là ça me semble tout à fait normal qu'il écrive comme ça, d'autant qu'il stock aussi des nombres. à mon avis le problème vient en amont.
même si je fais pas de java, le code qu'il a posté ne me semble pas présenter d'erreur. à mon avis c'est la phase de récupération de la saisie au clavier qui merde (ou je ne sais quel autre obscure traîtement qui est fait dessus ensuite)


Message édité par MagicBuzz le 01-08-2008 à 13:43:53
n°1767818
el muchach​o
Comfortably Numb
Posté le 01-08-2008 à 14:02:04  profilanswer
 

Le monsieur a dit: "en fait je voudrais saisir une phrase au clavier ( par exemple: bonjour tout le monde). Ensuite, envoyer cette phrase à ma methode ajout() pour l'écrire ds mon fichier binaire "

 

C'est totalement contradictoire avec le code posté à l'origine, j'en conviens, mais c'est ce que je lis.
Alors faut-il décrypter cela en "en fait, je fais des inputs au clavier, d'une phrase, puis d'un nombre, puis d'une autre phrase", auquel cas l'UTF semble superflu, ou bien "j'entre des champs depuis une IHM", ou je ne sais quoi d'autre, le tout mâtiné de code foireux, j'en sais rien. Et effectivement, il se peut tout-à-fait que le problème soit totalement ailleurs, vu la façon dont c'est présenté, on nage dans le flou total. C'est le 3e dans le genre cette semaine et j'avoue que le jeu des devinettes, ça commence un peu à me lasser.


Message édité par el muchacho le 01-08-2008 à 14:08:45

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1767824
MagicBuzz
Posté le 01-08-2008 à 14:14:14  profilanswer
 

ben quoi ? on va bientôt pouvoir faire une pétanque avec nos boules de crystal :o

n°1767836
kiooik
Posté le 01-08-2008 à 14:30:17  profilanswer
 

c'est bon le probléme est résolu en faisant  
 
InputStreamReader isr=new InputStreamReader(System.in);
        BufferedReader br=new BufferedReader(isr);
 
br.readLine();
 
Merci pour vos conseils et désolé si les informations que je vous ai fournis n'ont pas été trés clair pour vous mais je suis débutant en java et en programmation d'un point de vue général.
 
Merci encore

n°1767892
MagicBuzz
Posté le 01-08-2008 à 15:31:36  profilanswer
 

je te jure que moi ça me fait peur...
 
tu relis en mode texte à coups de readline un fichier binaire créé à coup de writeUTF ??? [:jerem38]


Message édité par MagicBuzz le 01-08-2008 à 15:32:10
n°1767946
kiooik
Posté le 01-08-2008 à 16:28:42  profilanswer
 

je ne relis pas le fichier binaire à coups de readLine...
 
br.readLine(); me permet d'entrer une chaine...
 
si je fais:  
 
String a;
 
a=br.readLine();  //a l'exécution je vais rentrer une chaine au clavier,  
                        //  cette chaine sera stockée dans a
ensuite j'écris cette chaine dans le fichier binaire ac writeUTF et je fais un readUTF pour lire cette chaine à partir du fichier.
 
En tout cas, ca fonctionne...

n°1767959
MagicBuzz
Posté le 01-08-2008 à 16:47:39  profilanswer
 

ah ok !
 
br c'est ton streamIn de la console :D
je croyais que c'était ton fichier, c'est pour ça j'ai eu très très peur :D


Message édité par MagicBuzz le 01-08-2008 à 16:47:50
n°1768000
kiooik
Posté le 01-08-2008 à 18:09:59  profilanswer
 

héhé ^^
 
de toute facon, lire un fichier binaire à coups de readline() , ca m'aurait donné une erreur de compilation.
 
Merci a tous


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [resolu] Chaine de charactéres

 

Sujets relatifs
[Resolu]OpenSSL erreur bizarre...[RESOLU]Petite appli php ou javascript
[RESOLU] VBA variable differente en fonction du bouton clicke[Résolu]Retour à la ligne dans cellule composante pear Spreadsheet
[C] conversion fichier binaire Big-Little Endian [RESOLU][RESOLU]Installation extension GD
[resolu] List et explosion de la conso mémoire[Résolu]Probleme Surlignement ligne avec Javascript
[Résolu] problème background-repeat[résolu] waitFor() qui reste bloqué...
Plus de sujets relatifs à : [resolu] Chaine de charactéres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR