Longueur du string dans un fichier

Résolu
Lucieinthesky Messages postés 6 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 17 octobre 2006 - 3 août 2006 à 14:49
Lucieinthesky Messages postés 6 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 17 octobre 2006 - 17 oct. 2006 à 17:17
J'écris une méthode qui écrit une string dans un fichier, ,je n'ai que 64 caractères et je ne sais pas pourquoi.

Voici la méthode

public static void Ecr_Gram()
       /* est activée lors de la reconnaissance de la fin d'une
       * règle ou d'une sous-règle - alternative -
       */
         {
           Writer fluxecritSauvgGram = null;
           Writer fluxEcrNgram       = null;
          
           try
           {
               String cheminFichierEcr = JOptionPane.showInputDialog("Nouv Fichier Grammaire : ");
               String cheminFichierSauvg = JOptionPane.showInputDialog("Fichier Sauv Grammaire :");   
              
               fluxEcrNgram  = new BufferedWriter (
                       new FileWriter (cheminFichierEcr));
               fluxecritSauvgGram = new BufferedWriter (
                       new FileWriter (cheminFichierSauvg));
               for(int i = 0; i < INgram; i++)
                   fluxEcrNgram.write(Ngram[i]);
               for(int i = 0; i < Gram[0]; i++)
                   fluxecritSauvgGram.write(Gram[i]);
           }
           catch (IOException ex)
           {
               JOptionPane.showMessageDialog(null,ex);
           }
           finally
           {
               try
               {
                   if(fluxEcrNgram != null)
                       fluxEcrNgram.close();
                   if(fluxecritSauvgGram != null)
                       fluxecritSauvgGram.close();
               }
               catch (IOException ex)
               {
                   ex.printStackTrace();
               }
           }// fin du 2ème fnally
             }// fin de la méthode Ecr_Gram
    

9 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
3 août 2006 à 16:01
Qu'est ce que sont INgram, NGram et Gram ?

Qu'est que doivent faire les boucles suivantes ?  


         for(int i = 0; i < INgram; i++)

                   fluxEcrNgram.write(Ngram[i]);

               for(int i = 0; i < Gram[0]; i++)

                   fluxecritSauvgGram.write(Gram[i]);


++
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
4 août 2006 à 14:31
Normalement la taille du buffer n'intervient pas dans l'ecriture, il
sert juste, a regrouper les acces disques disque. Il faudrait peut etre
regarder plus en detail ce que font les boucles (en utilsant des printf
pour voir le nombre d'iterations dans les boucles, ..). D'un autre coté
le write() avec des valeurs négatives ne marche peut etre pas
correctement (les caracteres unicode sont tous positifs).

A part ces  détails la je vois d'ou l'erreur pourrais venir.


bon courage

++
3
Lucieinthesky Messages postés 6 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 17 octobre 2006
3 août 2006 à 21:38
Cette boucle écrit la nouvelle  grammaire  Ngram  et  l'ancienne  grammaire Gram .
Ngram est l'indice de Gram et INgram est l'indice de Ngram.
Merci de votre intérêt pour mon problème

public  static int Igram          = 0; // indice de la Grammaire
public  static int INgram         = 6; //  de la nouv. grammaire
public  static int        Gram[] = {414,371,490,6,2,-1,1,10,0,-1,38,2,-1,413,7,0,8,0,
                                         30, 0, 2,  0,1,0, 3,0, 4,0, 5, 0,6, 0,-1,-2,0,0,
                                   0,   0, 3,42,0,-1,317,0,-1,137,1,-1,371,7,0,-1,86,2,
                                   -1,372,7,0,8,0,10,0,32,0,-1,-2,0,0,0,0,0,0,
                                   0, 0,  0,0,0, 0,  0, 0,0, 0,  0,0, 0,  0,6,92,111,127,
                                   0,-1,377,7,0,-1,378,11,0,-1,344,3,-1,380,7,0,  -1,137,
                                   1,-1,-2,381,7,0,-1,378,12,0,-1,408,7,0,-1,137,1,-1,
                                   -2,382,7,0,8,0,-1,86,0,-1,-2,7,141,0,-1,383,13,0,
                                   7,0,14,0,-1,170,0,-1,414,7,0,-1,203,0, -1,238,3,-1,
                                   409,7,0,13,0,-1,-2,0,8,177,184,191,196,0,-1,384,7,0,
                                   28,0,-1,-2,389,7,0,28,0,-1,-2,392,7,0,-1,-2,396,7,
                                   0,-1,-2,0,0,9,207,0,-1,378,15,0,-1,399,7,0,16,1,
                                   410,-1,250,1,-1,400,7,0,27,1,410,-1,-2,0,0,0,0,0,
                                   0,0,0,0,10,242,0,-1,401,7,0,-1,203,0,-1,-2,12,254,
                                   0,-1,261,0,-1,306,3,-1,-2,13,268,276,284,292,0,-1,378,19,
                                   0,18,1,410,-1,-2,378,20,0,18,1,410,-1,-2,378,21,0,18,
                                   1,410,-1,-2,378,22,0,18,1,410,-1,-2,0,0,0,0,0,0,
                                   16,310,0,-1,401,7,0,265,0,-1,-2,17,321,0,-1,377,23,0,
                                   24,0,25,0,26,0,7,0,9,0,-1,378,29,0,-1,380,7,0,
                                   -1,-2,18,351,356,0,-1,0,0,411,7,0,-1,-2,412,7,0,-1,
                                   -2,402,7,0,-1,-2,404,7,0,-1,-2,15648,15136,23338,8224,10845,8224,15392,
                                    18788,8224,15904,31520,12064,23328,18785,25460,26991,28192,8224,18785,25460,8224,16739,29801,28526,8224,
                                    16739,29728,8224,10272,10528,11296,10815,8224,16170,8224,12079,8224,32032,23840,0,10784,16160,9248,14880};  
public  static int[] Ngram        = new int[500];
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
4 août 2006 à 09:03
Bonjour

D'apres la javadoc de java, il n'existe pas de fonctions qui permettent
d'ecrire directement un entier. La fonction write(int c) , n'ecrit pas
un entier, mais un caractere au format unicode je pense. Donc, avec le
code suivant

import java.io.*;

public class test

{

    public static void main(String[] args)

    {

        try

        {

           
BufferedWriter t1  = new BufferedWriter(new FileWriter
("test1.txt"));

            for(int i=0; i < 250; i++)

            {

                t1.write(i);

            }

            t1.close();

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }

    }

} on obtient un fichier avec les caracteres ascii de 0 a 250,
=> les
caracteres non imprimables + " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`" ...


Pour avoir un fichier avec les valeurs entiers (directement lisible) il faut creer une String,
t1.write(""+i" ");

""+i" " => va creer une String compose d'un nombre et d'un
separateur espace, et va etre correctement ecrit en memoire. Si on
remplace la ligne precedente  en rouge dans l'exemple si dessus,
on va obtenir un fichier avec 0 1 2 3 ...


Voila, j'espere que cela va resoudre votre probleme

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lucieinthesky Messages postés 6 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 17 octobre 2006
4 août 2006 à 13:19
Dans Gram ou Ngram j'ai effectivement des caractères au format unicode, des adresses dans le tableau et des pointeurs.
Je me suis mal expliquée sur mon problème, cette grammaire est rangée dans un tableau de 500 cases et quand je l'imprime dans un fichier je n'ai que les 64 premières cases de mon tableau qui sont sauvegardées et ensuite imprimées.
Y a t il un paramètre qui limite la taille du buffer lors de l'écriture dans un fichier: BufferedWriter.
Merci de votre aide, toutes mes excuses sur ma mauvaise explication
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
5 août 2006 à 13:33
Remarque : si on ouvre un fichier avec le bloc notes
par exemple, on voit pas tous les caractères (les caracteres non
imprimable ne sont pas afficher).

Il faut mieux utilise scite, un editeur de texte opensource et gratuit,
qui permet d'afficher les caracteres exotiques, l'erreur peut venir de
la aussi

 http://www.scintilla.org/SciTE.html

++
0
Lucieinthesky Messages postés 6 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 17 octobre 2006
5 août 2006 à 18:34
Je travaille sous eclipse, je peux regarder le fichier avec scintilla
Merci encore
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
7 août 2006 à 11:43
Bonjour, Le problème est toujours pas résolu ?

Au fait, c'est quel fhichier qui pose probleme ?  fluxEcrNgram ou fluxecritSauvgGram ?

Chez moi j'ai essaye le code et dans fluxecritSauvgGram, il y le bon
nombre de caracteres a priori, l'autre je sais pas vu que je sais pas
ce qu'il y a dedans


++
0
Lucieinthesky Messages postés 6 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 17 octobre 2006
17 oct. 2006 à 17:17
j'écris des entiers dans un fichier avec FileWriter, en transformant mon entier en char.
Quand je relis par File Reader, d'après ce que j'ai compris je lis des entiers, je n'obtiens pas les mêmes valeurs.
J'écris le nombre entier 404 et je récupère 63 dans un entier, car si j'ai compris on lit des entiers avec read().
Je ne suis pas sure que le new me positionne  au début du fichier.
merci de votre aide
0
Rejoignez-nous