Lecture de données à partir d'un fichier data [Résolu]

Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 14:27 - Dernière réponse : Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention
- 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
Afficher la suite 

22 réponses

Répondre au sujet
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 22:05
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Twinuts
lafolle24320 406 Messages postés samedi 26 mars 2005Date d'inscription 29 juin 2009 Dernière intervention - 4 oct. 2006 à 14:38
0
Utile
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
Commenter la réponse de lafolle24320
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 4 oct. 2006 à 16:08
0
Utile
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"
Commenter la réponse de sheorogath
super_toinou 764 Messages postés mardi 25 mai 2004Date d'inscription 8 mars 2011 Dernière intervention - 4 oct. 2006 à 16:34
0
Utile
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
Commenter la réponse de super_toinou
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 17:36
0
Utile
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;



      
    
 






     }
Commenter la réponse de Javatarik
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 4 oct. 2006 à 18:25
0
Utile
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"
Commenter la réponse de sheorogath
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 18:41
0
Utile
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  
Commenter la réponse de Javatarik
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 18:49
0
Utile
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
Commenter la réponse de Javatarik
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 18:50
0
Utile
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
Commenter la réponse de Twinuts
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 18:56
0
Utile
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
Commenter la réponse de Javatarik
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 19:36
0
Utile
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
Commenter la réponse de Twinuts
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 20:08
0
Utile
 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+






 
Commenter la réponse de Javatarik
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 20:18
0
Utile
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
Commenter la réponse de Twinuts
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 20:28
0
Utile
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



 





 
Commenter la réponse de Javatarik
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 20:33
0
Utile
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
Commenter la réponse de Twinuts
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 20:50
0
Utile
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();
        }


    }
 
  
}
Commenter la réponse de Javatarik
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 20:58
0
Utile
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
Commenter la réponse de Twinuts
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 21:09
0
Utile
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 ?






 
Commenter la réponse de Javatarik
Twinuts 5260 Messages postés dimanche 4 mai 2003Date d'inscription 18 avril 2018 Dernière intervention - 4 oct. 2006 à 21:17
0
Utile
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
Commenter la réponse de Twinuts
Javatarik 26 Messages postés mercredi 22 février 2006Date d'inscription 30 janvier 2007 Dernière intervention - 4 oct. 2006 à 21:34
0
Utile
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 ?
Commenter la réponse de Javatarik

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

lecture de données à partir d'un fichier data - page 2