Lecture formaté d'un fichier ASCII

cs_youssefmed Messages postés 3 Date d'inscription jeudi 17 juillet 2003 Statut Membre Dernière intervention 3 mai 2004 - 1 mai 2004 à 01:53
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004 - 8 sept. 2004 à 18:11
j'ai besoin d'aide à propos de la lecture de fichiers ASCII et je dois tiré des données separes par des retour à la ligne et des espaces comment faire pour recuperer tout ces donnees et merci d'avance

9 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
1 mai 2004 à 09:30
Salut,

tu peux utiliser StringTokenizer ou les expressions régulières
0
cs_youssefmed Messages postés 3 Date d'inscription jeudi 17 juillet 2003 Statut Membre Dernière intervention 3 mai 2004
3 mai 2004 à 15:37
merci mais je voudrai un peu plus de detail un exemple si c fesable
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
3 mai 2004 à 20:31
donne un exemple du fichier pour savoir quoi faire.
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004
7 sept. 2004 à 21:58
j'ai le meme probleme avec un fichier texte...
je voudrais récupérer des données sur 2 lignes... mais j'y arrive que sur une...

Le top ce serait que je puisse choisir la ligne que je vais récupérer !!!

voici un exemple de fichier :

...
25 ARG TRA 12 23.099 23.923 0.0001 235 345.0934
27 ARG TRA 12 34.099 55.094 234.09 234 370.9900
...
0

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

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
7 sept. 2004 à 22:02
pas compris. Que veux tu dire par "j'y arrive que sur une..."
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004
8 sept. 2004 à 11:31
Ma class doit me permettre de lire un fichier texte et de mettre dans 2 tableaux les données numériques de 2 lignes successives.

25 ARG TRA 12 23.099 23.923 0.0001 235 345.0934
27 ARG TRA 12 34.099 55.094 234.09 234 370.9900

j'aurais donc deux tableaux: before qui prendra les données de la première ligne et after qui prendra les données de la seconde, ainsi:
before[0] = 25
before[1] = 12
before[2] = 23.099
...
after[0] = 27
after[1] = 34.099
...
after[6] = 370.9900

mais mon programme retourne dans les deux tableaux les valeurs de la premiere ligne...

J'utilise un StreamTokenizer pour récupérer le numéro de la ligne et pour vérifier si le Token lu est un mot (TT_WORD) ou un chiffre (TT_NUMBER)

j'ai fait une boucle sur le numéro de la ligne, tant que le numéro trouvé par la méthode StreamTokenizer.lineno() est différent du numéro voulu, on continue de lire les Tokens jusqu'à ce que les numéros soient égaux...

mais ça ne fonction pas...
si je fais
lire.memory(1)
pour lire la première ligne... tout va bien...
si je fais
lire.memory(2)
pour lire la seconde ligne... ça marche plus...

je post mon code en meme temps...

import java.io.*;
import java.util.StringTokenizer;

public class Lecture3 {
    
    private String fileName;

    private int nTokens;
    
    private double[] before;
    private double[] after;
    
    public Lecture3(String name) throws Exception {
        fileName  = name;
        BufferedReader in = new BufferedReader(new FileReader(fileName));
    }

    private void history() throws Exception {
        BufferedReader in = new BufferedReader(new FileReader(fileName));
        StringTokenizer st = new StringTokenizer(in.readLine());
        nTokens = st.countTokens();
    }
    
    public void memory(int num_line) throws Exception {
        memoryBefore(num_line);
    }
    
    private double[] memoryBefore(int line) throws Exception {
        
        BufferedReader in = new BufferedReader(new FileReader(fileName));
        Reader r = new BufferedReader(in);
        StreamTokenizer str = new StreamTokenizer(r);
        history();  // récupérer le nombre d'éléments
        System.out.println("nombre d'éléments: "+nTokens);
        before = new double[nTokens-2];
        
        int i=0;  // indice du tableau
        try {
            int line_number = str.lineno(); // numéro de la ligne
            while(line_number != line) {
                str.nextToken();
            } // end of while(line_number != line)
            if (line_number == line) {
                while((str.nextToken() != StreamTokenizer.TT_EOL)) {
                switch (str.ttype) {
                    case StreamTokenizer.TT_NUMBER:
                        // TEST
                        // System.out.println("number: "+str.nval+"  line "+ line_number);
                        before[i]=str.nval;
                        System.out.println("before["+i+"]= "+before[i]);
                        i++;
                        break;
                    case StreamTokenizer.TT_WORD:
                        // TEST
                        // System.out.println("word: "+str.sval);
                        break;
                    default:
                        System.out.println("Erreur");
                        break;
                } // end of Switch()
            } // end of while
            } // end of if (line_number == line)
            
        } // end of try
        catch (Exception e) {
            // System.out.println("Exception : "+e);
        }
        return before;
    } // end of memoryBefore()
      
    
} // end of class


et ma class de test :
<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>public class test_interpolator {

public test_interpolator() {
}

public static void main(String[] args) throws Exception {
System.out.println("Test lecture et determination");
Lecture3 lire = new Lecture3("/users/carrilhor/Java/jasim/util/essai.txt");
lire.memory(2);
}
}
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
8 sept. 2004 à 13:14
dans ta première boucle while(line_number != line), tu ne mets pas à jour le numéro de ligne. Je suis étonné que tu obtiennes un résultat sachant que ça va lire entièrement ton fichier.
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004
8 sept. 2004 à 16:34
T'as raison !!!

en mettant à jour le numéro de la ligne dans la première boucle while ça va beaucoup mieux...

 while(line_nulber ! line) {
    line_number = str.lineno();  //mise à jour numéro de ligne
    str.nextToken();
} 


encore quelques modifications et ça devrait marcher ...
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004
8 sept. 2004 à 18:11
Ca y est... c'est FINI...

MErci Beaucoup kirua12 !

:big)
0
Rejoignez-nous