Lecture de données à partir d'un fichier data

Résolu
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007 - 4 oct. 2006 à 14:27
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007 - 4 oct. 2006 à 22:15
Bonjour à tous les amis programmeurs de javafr.com


Voila, je suis entrain de faire un projet enveloppent des codes java et fortran 90, ce dernier fait appel à un exécutable fortran qui donne des fichiers de sortie  en (.dat), le problème que j’ai c’est que je n’arrive pas à exploiter ces données qui sont sous forme de vecteurs (Double precision) dans mon code java, ce que je veux, c’est de récupérer ces vecteur et les utiliser dans mon appli java, y’a-t-il quelqu’un qui peux m’aider



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Ps : j’ai trouver un bout de code qui lit des donner mais comment identifier ce flux d’entrer et l’affecter à des tableaux !!!!!



 





 import java.io.*;
public class Reader {
   
    public static void main(String[] args)throws IOException,
     FileNotFoundException   {
            try{





     FileReader fs = new FileReader("D:/Java_eclips/reader/classes/data.dat");
     


     int a = fs.read();
          while( a != -1 ){





         System.out.print((char)(a));
               a = fs.read();
           
     }





 





 




Merci

22 réponses

Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 22:05
Salut,

c'est normale l'objet properties c'est comme les hashtable soit du LIFO(Last Input First Output) donc faut trier..... bon moui je quitte la conv....

bon courrage ++

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
4 oct. 2006 à 14:38
il te faut peut être modifier le fortran afin d'envoyer à ton java des petits fichiers dont tu peux distinguer de suite tes données

bonne prog


lafolle
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
4 oct. 2006 à 16:08
je comprend pas ton probleme en fait
tu veux lire un fichier mais t'arrive pas a affecyer les donnees a un vecteur ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 7
4 oct. 2006 à 16:34
idem que sheorogath
de toute facon il faut que tu connaisse la structure de ton fichier si tu veux regénérer un vecteur par dessus
dans ce cas parse ton fichier et ajoute les éléments un par un dans ton vecteur java !
si tu connais pas la structure à l avance ben bon courage ....
++ Toinou
0

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

Posez votre question
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 17:36
Mercis chères amis (e)


En faites j’ai un vecteur de 1000 éléments obtenus avec mon code fortran que je veux le traité dans mon code java, le bout de code  que j’ai donné auparavant le lit mais quant j’affecte un vecteur à a sa donne des truc en binaire !



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 





int a = fs.read();






   








     while( a != -1 ){






 







         System.out.print((char)(a));






       








          vecteur[i] = a;  // !!!!!!!!






         a = fs.read();






         
i=i+1;



      
    
 






     }
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
4 oct. 2006 à 18:25
oula pour un vecteur on fait :

vecteur.add(ton element);

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 18:41
Salut sheorogath,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>



Peut être que vous m’aviez mal compris, donc je vais vous expliquer les choses dans le langage informatique, donc j’ai par exemple deux petits code l’un en fortran et l’autre en java comme suite :  




//////////////////////////////////////////////////////////////////////////////////////////////




import java.io.*;







public class Reader {








 
    public static void main(String[] args)throws IOException,








           
            FileNotFoundException   {








           
           
           
           
            try{








     FileReader fs = new FileReader("D:/Java_eclips/reader/classes/data.dat");








  
    
 int a = fs.read();








   
     while( a != -1 ){








         System.out.print((char)(a));








     
         
a = fs.read();






 
     }


///////////////////////////////////////////////////////////////////////////////////////////////



program essai





implicit none





real,dimension(10) :: x






integer            ::    i







open(01,file= 'data.dat')








 







do i=1,10







x(i)=i







write(1,*)i, x(i)






enddo





end


//////////////////////////////////////////////////////////////////////////////////////////////



 




ce que je veux c’est lire x(i) dans ma class Reader, et ensuite affecté par exemple ce
x(i) à veteur[i] dans la même class, afin de l’utiliser dans une méthode, donc comment faire sans que je tombe sur le binaire.



 




merci  
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 18:49
Je voudrais seulement ajouter que je suis débutant en java, mais vétéran  en fortran, mon bute principale est de simuler un comportement physique dans une appli swing java, ce qui ma poussé à revenir à fortran c’est pour utilisation de ces modules et les subroutine de numerical recipse , merci
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 18:50
Salut,

Que contient le fichier .dat un vecteur sauce fortrant ( soit la sérialisation de celui-ci )?
ou il contient uniquement les données du vecteur ? si oui comment sont elle représentée dans le fichier ?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 18:56
Salut Twinuts,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






Si vous connaissiez un peut le fortran pour le code simple que j ai donné, c est facile à imaginer : 








         
 1   1.000000   








           2   2.000000   








           3   3.000000   








           4   4.000000   








           5   5.000000   








           6   6.000000   








           7   7.000000   








           8   8.000000   








           9   9.000000   








          10   10.00000
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 19:36
Salut,

bon oki alors au plus simple, essais d'ecrire ton fichier sous cette forme
1=1.000000  

2=2.000000  

3=3.000000  

4=4.000000  

5=5.000000 

6=6.000000

7=7.000000

8=8.000000

9=9.000000

10=10.00000

ensuite tu peux faire

public static void main(String[] args) {
        try{
            //creation de l'objet qui va permettre de lire le fichier
            Properties p = new Properties();
            //on charge le fichier
            p.load(new FileInputStream(new File("Test.dat")));
            //on recupere les cles
            Enumeration<Object> enumeration = p.keys();
            //pour tous les elements on affiche
            while(enumeration.hasMoreElements()){
                Object key = enumeration.nextElement();
                Object value = p.get(key);                System.out.println("Key " + key + ", value " + value);
            }
        }catch(Exception e){
            e.printStackTrace();
        }

    }

voila maintenant soit tu preserve les hashtable soit tu le met dans un vecteur....

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 20:08
 Merci Twinuts, <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Je cours essayé ce code, j’espère que ça marchera, en faite pour être très front j’ai deux vecteur x(i), y(i) pour les plotés via g.drawLine





Merci et a+






 
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 20:18
Salut,

ba pour x,y c'est la meme
[id=x,y]

1=1.000000,10.000000

2=2.000000,9.000000

3=3.000000,8.000000

4=4.000000,7.000000

5=5.000000,6.000000

6=6.000000,5.000000

7=7.000000,4.000000

8=8.000000,3.000000

9=9.000000,2.000000

10=10.00000,1.000000

et le code

public static void main(String[] args) {
        try{
            //creation de l'objet qui va permettre de lire le fichier
            Properties p = new Properties();
            //on charge le fichier
            p.load(new FileInputStream(new File("Test.dat")));
            //on recupere les cles
            Enumeration<Object> enumeration = p.keys();
            //pour tous les elements on affiche
            while(enumeration.hasMoreElements()){
                Object key = enumeration.nextElement();
                String value = p.get(key).toString();
                //on parse la valeur et recup x et y
                StringTokenizer token = new StringTokenizer(value, ", ");
                if(token.countTokens() > 1 ){
                    String x = token.nextToken();
                    String y = token.nextToken();
                    System.out.println("Key = " + key + ", [x:" + x + ", y:" + y + "]");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }

    }

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 20:28
Salut me revoilà et désolé pour le dérangement,


Le mieux que je peux faire pour les data fortran c est cette notation :



          
1=   1.000000    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






           2=   2.000000   






           3=   3.000000   






           4=   4.000000   






           5=   5.000000   






           6=   6.000000   






           7=   7.000000   






           8=   8.000000   






           9=   9.000000   






    
     10=   10.00000   


et cela à cause du faite que l un est integer et l’autre real, et en compilant votre code java j ai eu des erreurs (manque de quelque méthodes ) ça donne le message suivant :



cannot resolve symbol class Properties




cannot resolve symbol variable Enumeration







cannot resolve symbol variable Object







cannot resolve symbol variable enumeration







 





les deux vecteur que j’ai sont real



 





 
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 20:33
Salut,

met les bon import dans le code

import java.io.File;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.StringTokenizer;

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 20:50
Salut,


J’ai retransformé mes data comme suite :



   1.000000    ,   5.000000    <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



   2.000000    ,   6.000000   



   3.000000    ,   7.000000   



   4.000000    ,   8.000000   



   5.000000    ,   9.000000   



   6.000000    ,   10.00000   



   7.000000    ,   11.00000   



   8.000000    ,   12.00000   



 
 9.000000    ,   13.00000   



   10.00000    ,   14.00000   


et essayé votre code sur eclips au lieu de JCreator LE, je pense que j’ai un manque de fichier jar, mais même chose sa donne une erreur :



java.lang.Error: Unresolved compilation problems:









      The type Enumeration is not generic; it cannot be parameterized with arguments <Object>









      Syntax error, parameterized types are only available if source level is 5.0









 







     

at PackageJAva.MainProgram.main(

MainProgram.java:25

)








Exception in thread "main"






 






Je pense que c’est la ligne






 






Enumeration<Object> enumeration = p.keys();









 






Voici votre code :




Salut,



J’ai retransformé mes data comme suite :





   1.000000    ,   5.000000   








   2.000000    ,   6.000000   








   3.000000    ,   7.000000   








   4.000000    ,   8.000000   








   5.000000    ,   9.000000   








   6.000000    ,   10.00000   








   7.000000    ,   11.00000   








   8.000000    ,   12.00000   








 
 9.000000    ,   13.00000   








   10.00000    ,   14.00000   





et essayé votre code sur eclips au lieu de JCreator LE, je pense que j’ai un manque de fichier jar, mais même chose sa donne une erreur :



java.lang.Error: Unresolved compilation problems:









      The type Enumeration is not generic; it cannot be parameterized with arguments <Object>









      Syntax error, parameterized types are only available if source level is 5.0









 







     

at PackageJAva.MainProgram.main(

MainProgram.java:25

)








Exception in thread "main"






 






Je pense que c’est la ligne






 






Enumeration<Object> enumeration = p.keys();









 






Voici votre code :







package PackageJAva;

import java.io.File;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.StringTokenizer;


public class MainProgram {
 public MainProgram() {}
 /**
  * @param args
  */
 
 public static void main(String[] args) {
        try{
            //creation de l'objet qui va permettre de lire le fichier
            Properties p = new Properties();
            //on charge le fichier
            p.load(new FileInputStream(new File("Test.dat")));
            //on recupere les cles
            Enumeration<Object> enumeration = p.keys();
            //pour tous les elements on affiche
            while(enumeration.hasMoreElements()){
                Object key = enumeration.nextElement();
                String value = p.get(key).toString();
                //on parse la valeur et recup x et y
                StringTokenizer token = new StringTokenizer(value, ", ");
                if(token.countTokens() > 1 ){
                    String x = token.nextToken();
                    String y = token.nextToken();
                    System.out.println("Key = " + key + ", [x:" + x + ", y:" + y + "]");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }


    }
 
  
}
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 20:58
Salut,

bon déja j'utilise le jdk 1.5 et visiblement toi non donc tu ne peux utiliser les templates

maintenant
selon l'exemple de fichier que tu donnes faut que tu utilise une autre solution pour lire ton fichier vu que la aucune des deux solution de fonctionnera

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 21:09
Salut ,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






J’ai le j2sdk1.4.2_11, voyez vous que si j’utilise un autre compilateur comme le Jbuilder X (avec jdk1.4), ou je télécharge le jdk 1.5 ça marchera ?






 
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
4 oct. 2006 à 21:17
Salut,

il se télécharge sur le site de sun.....

pour info voici le code sans les tempate mais je te rappel qui ne fonctionne que pour cette exemple de fichier

1=1.000000,10.000000

2=2.000000,9.000000

3=3.000000,8.000000

4=4.000000,7.000000

5=5.000000,6.000000

6=6.000000,5.000000

7=7.000000,4.000000

8=8.000000,3.000000

9=9.000000,2.000000

10=10.00000,1.000000

et le code

import java.io.File;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.StringTokenizer;
.........

public static void main(String[] args) {
        try{
            //creation de l'objet qui va permettre de lire le fichier
            Properties p = new Properties();
            //on charge le fichier
            p.load(new FileInputStream(new File("Test.dat")));
            //on recupere les cles
            Enumeration enumeration = p.keys();
            //pour tous les elements on affiche
            while(enumeration.hasMoreElements()){
                String key = enumeration.nextElement().toString();
                String value = p.getProperty(key);
                //on parse la valeur et recup x et y
                StringTokenizer token = new StringTokenizer(value, ", ");
                if(token.countTokens() > 1 ){
                    String x = token.nextToken();
                    String y = token.nextToken();
                    System.out.println("Key = " + key + ", [x:" + x + ", y:" + y + "]");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Javatarik Messages postés 26 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 30 janvier 2007
4 oct. 2006 à 21:34
Salut ,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Je suis entrain de le téléchargé (je suis à 10%), avec le code que vous m’aviez donné j’obtiens l’affichage suivant :






 






Key = 9, [x:9.000000, y:13.00000]








Key = 8, [x:8.000000, y:12.00000]








Key = 7, [x:7.000000, y:11.00000]








Key = 6, [x:6.000000, y:10.00000]








Key = 5, [x:5.000000, y:9.000000]








Key = 4, [x:4.000000, y:8.000000]








Key = 3, [x:3.000000, y:7.000000]








Key = 2, [x:2.000000, y:6.000000]








Key = 10, [x:10.00000, y:14.00000]








Key = 1, [x:1.000000, y:5.000000]






 






Il y a un peu de random dans l’air, peut être du faite de la forme du fichier data :






          
1=   1.000000    ,   5.000000   








           2=   2.000000    ,   6.000000   








           3=   3.000000    ,   7.000000   








           4=   4.000000    ,   8.000000   








           5=   5.000000    ,   9.000000   








           6=   6.000000    ,   10.00000   








           7=   7.000000    ,   11.00000   








           8=   8.000000    ,   12.00000   








           9=   9.000000    ,   13.00000   








          10=   10.00000    ,   14.00000
   







peut être faut il faire un trie selon key ?
0
Rejoignez-nous