Remplir Map a partir de fichier texte
omidaoui
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
omidaoui Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
omidaoui Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un problem lors du chargement de donnees dans mon Map<String, Map<String,Double>>,
je ve remplire cet map a partire d'un fichier texte de cet forme
T-Rqt1 T-Rqt2 T-Rqt3 T-Rqt4
T-Doc1 1.5 11.0 10.0 14.0
T-Doc2 29.0 29.0 29.0 40.0
T-Doc3 23.0 10.0 1.0 1.0
T-Doc4 29.0 2.0 2.0 2.0
T-Doc5 20.0 9.0 1.0 1.5
T-Doc6 14.0 5.0 20.0 0.0
pour quelle soit de la forme :
MapDoc =
{T-Doc1={T-Rqt1=1.5, T-Rqt2=11.0, T-Rqt3=10.0, T-Rqt4=14.0},
T-Doc2={T-Rqt1=29.0, T-Rqt2=29.0, T-Rqt3=29.0, T-Rqt4=40.0},
T-Doc3={T-Rqt1=23.0, T-Rqt2=10.0, T-Rqt3=1.0, T-Rqt4=1.0},
T-Doc4={T-Rqt1=14.0, T-Rqt2=5.0, T-Rqt3=20.0, T-Rqt4=0.0},
T-Doc5 ={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0}
}
moi puisque je charge au debut un fichier requets contenant les termes du requet T-Rqt1,2,3,4
chargés dans une listRqt
donc j ai fait le code suivant
public void chargermotsfichier(String chemin) throws IOException {
File f = new File(chemin);
Scanner s = new Scanner(f);
String term = "";
Map<String, Double> Mapfichier = new HashMap<String, Double>();
// je saute la premiere ligne qui contient les termes du requete qu j'ai deja dans
// listRqt qui est une ArrayList
s.nextLine();
while(s.hasNextLine()){
StringTokenizer scc=new StringTokenizer(s.nextLine(),"\t");
while(scc.hasMoreTokens()) {
term = scc.nextToken();
// le variable term va contenir chaque fois les T-Doc1,2,3,4,5,6..
for(int i = 0; i < listRqt.size(); i++){
String Oi = scc.nextToken();
Double Wi = Double.parseDouble(Oi);
// les Wi vont contenir les valeur double de la matrice
// cet map fichier va contenir les termes du requet T-Rqt et les valeurs
// de chaue lignes correnspondant a un T-Doc donnee
Mapfichier.put(listRqt.get(i), Wi);
}
// apres je charge le tt dans le map globale
MapDoc.put(term, Mapfichier);
]
}
System.out.println("MapDoc = "+MapDoc);
}
le problem que j'ai, c'est que a la fin je trouve mon MapDoc
comme ca
MapDoc =
{T-Doc1={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc2={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc3={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc4={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc5 ={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc6 ={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0}
}
c'est que les donnee du Mapfichier vont etre ecrase chaque fois, et aussi dans le MapDoc
les valeur (Mapfichier) vont etre ecraser par la dernier Mapfichier construite
est ce k'il y a une solution
aider moi SVP
j'ai un problem lors du chargement de donnees dans mon Map<String, Map<String,Double>>,
je ve remplire cet map a partire d'un fichier texte de cet forme
T-Rqt1 T-Rqt2 T-Rqt3 T-Rqt4
T-Doc1 1.5 11.0 10.0 14.0
T-Doc2 29.0 29.0 29.0 40.0
T-Doc3 23.0 10.0 1.0 1.0
T-Doc4 29.0 2.0 2.0 2.0
T-Doc5 20.0 9.0 1.0 1.5
T-Doc6 14.0 5.0 20.0 0.0
pour quelle soit de la forme :
MapDoc =
{T-Doc1={T-Rqt1=1.5, T-Rqt2=11.0, T-Rqt3=10.0, T-Rqt4=14.0},
T-Doc2={T-Rqt1=29.0, T-Rqt2=29.0, T-Rqt3=29.0, T-Rqt4=40.0},
T-Doc3={T-Rqt1=23.0, T-Rqt2=10.0, T-Rqt3=1.0, T-Rqt4=1.0},
T-Doc4={T-Rqt1=14.0, T-Rqt2=5.0, T-Rqt3=20.0, T-Rqt4=0.0},
T-Doc5 ={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0}
}
moi puisque je charge au debut un fichier requets contenant les termes du requet T-Rqt1,2,3,4
chargés dans une listRqt
donc j ai fait le code suivant
public void chargermotsfichier(String chemin) throws IOException {
File f = new File(chemin);
Scanner s = new Scanner(f);
String term = "";
Map<String, Double> Mapfichier = new HashMap<String, Double>();
// je saute la premiere ligne qui contient les termes du requete qu j'ai deja dans
// listRqt qui est une ArrayList
s.nextLine();
while(s.hasNextLine()){
StringTokenizer scc=new StringTokenizer(s.nextLine(),"\t");
while(scc.hasMoreTokens()) {
term = scc.nextToken();
// le variable term va contenir chaque fois les T-Doc1,2,3,4,5,6..
for(int i = 0; i < listRqt.size(); i++){
String Oi = scc.nextToken();
Double Wi = Double.parseDouble(Oi);
// les Wi vont contenir les valeur double de la matrice
// cet map fichier va contenir les termes du requet T-Rqt et les valeurs
// de chaue lignes correnspondant a un T-Doc donnee
Mapfichier.put(listRqt.get(i), Wi);
}
// apres je charge le tt dans le map globale
MapDoc.put(term, Mapfichier);
]
}
System.out.println("MapDoc = "+MapDoc);
}
le problem que j'ai, c'est que a la fin je trouve mon MapDoc
comme ca
MapDoc =
{T-Doc1={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc2={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc3={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc4={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc5 ={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0},
T-Doc6 ={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0}
}
c'est que les donnee du Mapfichier vont etre ecrase chaque fois, et aussi dans le MapDoc
les valeur (Mapfichier) vont etre ecraser par la dernier Mapfichier construite
est ce k'il y a une solution
aider moi SVP
A voir également:
- Remplir Map a partir de fichier texte
- Fichier bin - Guide
- Fichier epub - Guide
- Google map satellite gratuit - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
2 réponses
Désolé de ne pas chercher vraiment à corriger ton code (je ne connais pas les StringTokenizer) mais voici une manière de faire :
Ce qui donne ceci :
public static Map<String,Map<String,Double>> charger(File file) throws FileNotFoundException { Scanner sc = new Scanner(file); String[] entete = sc.nextLine().split("\t"); Map<String,Map<String,Double>> globalMap = new TreeMap<String,Map<String,Double>>(); while (sc.hasNextLine()) { String[] data = sc.nextLine().split("\t"); Map<String,Double> partialMap = new TreeMap<String,Double>(); for (int i=0; i<entete.length && i+1<data.length; i++) partialMap.put(entete[i], Double.parseDouble(data[i+1])); globalMap.put(data[0], partialMap); } sc.close(); return globalMap; } public static void main (String[] args) throws IOException { System.out.println(charger(new File("C:\\rqt.txt"))); }
Ce qui donne ceci :
{ T-Doc1={T-Rqt1=1.5, T-Rqt2=11.0, T-Rqt3=10.0, T-Rqt4=14.0}, T-Doc2={T-Rqt1=29.0, T-Rqt2=29.0, T-Rqt3=29.0, T-Rqt4=40.0}, T-Doc3={T-Rqt1=23.0, T-Rqt2=10.0, T-Rqt3=1.0, T-Rqt4=1.0}, T-Doc4={T-Rqt1=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt4=2.0}, T-Doc5={T-Rqt1=20.0, T-Rqt2=9.0, T-Rqt3=1.0, T-Rqt4=1.5}, T-Doc6={T-Rqt1=14.0, T-Rqt2=5.0, T-Rqt3=20.0, T-Rqt4=0.0} }
je vous remercie pour votre reponse, j'ai essayer ton code, mais le resultat c 'est qu il m affiche le Map doc comme ca
{
T-Doc1={=1.5, T-Rqt2=11.0, T-Rqt3=10.0, T-Rqt1=14.0},
T-Doc2={=29.0, T-Rqt2=29.0, T-Rqt3=29.0, T-Rqt1=40.0},
T-Doc3={=23.0, T-Rqt2=10.0, T-Rqt3=1.0, T-Rqt1=1.0},
T-Doc4={=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt1=2.0},
T-Doc5={=20.0, T-Rqt2=9.0, T-Rqt3=1.0, T-Rqt1=1.5},
T-Doc6={=14.0, T-Rqt2=5.0, T-Rqt3=20.0, T-Rqt1=0.0}
}
{
T-Doc1={=1.5, T-Rqt2=11.0, T-Rqt3=10.0, T-Rqt1=14.0},
T-Doc2={=29.0, T-Rqt2=29.0, T-Rqt3=29.0, T-Rqt1=40.0},
T-Doc3={=23.0, T-Rqt2=10.0, T-Rqt3=1.0, T-Rqt1=1.0},
T-Doc4={=29.0, T-Rqt2=2.0, T-Rqt3=2.0, T-Rqt1=2.0},
T-Doc5={=20.0, T-Rqt2=9.0, T-Rqt3=1.0, T-Rqt1=1.5},
T-Doc6={=14.0, T-Rqt2=5.0, T-Rqt3=20.0, T-Rqt1=0.0}
}
Je pense que cela vient d'un mal entendu sur le contenu du fichier parce que chez moi ça marche bien lorsque je le testes avec ce fichier :
T-Rqt1 T-Rqt2 T-Rqt3 T-Rqt4 T-Doc1 1.5 11.0 10.0 14.0 T-Doc2 29.0 29.0 29.0 40.0 T-Doc3 23.0 10.0 1.0 1.0 T-Doc4 29.0 2.0 2.0 2.0 T-Doc5 20.0 9.0 1.0 1.5 T-Doc6 14.0 5.0 20.0 0.0