Avec les mêmes fichiers ?
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Oui, pas un de moins ni un de plus
Je ne vois pas pourquoi ça ne fonctionne pas alors.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Ah :/
Mais apparemment l'erreur viendrait de la boucle forJe sais pas si ca t'aide..
Code : Sélectionner tout - Visualiser dans une fenêtre à part for(String line = reader.readLine(); line!=null; line=reader.readLine()) {
Non, le problème c'est l'encodage du fichier : on le lit avec un charset qui n'est pas le bon.
Montre-moi le code actuel de la méthode public static void collect(String file, int lineToSkip, String splitString, int dataIndex, String name, int countryIndex, Map<String, Map<String,String>> map) throws IOException {
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public static void collect(String file, int lineToSkip, String splitString, int dataIndex, String countryName, int countryIndex, Map<String, Map<String,String>> map) throws IOException { try(BufferedReader reader=Files.newBufferedReader(Paths.get(file),Charset.defaultCharset())) { for(String line = reader.readLine(); line!=null; line=reader.readLine()) { if ( lineToSkip>0 ) { // on saute les lignes au début lineToSkip--; continue; } final String[] data = line.split(splitString); String value = data[dataIndex]; if( countryIndex==-1 ) { final Map<String,String> dataMap=new HashMap<>(); dataMap.put(countryName, value); map.put(value, dataMap); } else { final Map<String,String> dataMap=map.get(data[countryIndex]); if ( dataMap!=null ) { dataMap.put(countryName, value); } } } } }
Tu peux exécuter ce petit programme en remplaçant "fichier1", "fichier2" et "fichier3" par les noms de tes fichiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class Test { public static void main(String[] args) { try { System.out.println(Charset.defaultCharset()); showEncoding("fichier1"); showEncoding("fichier2"); showEncoding("fichier3"); } catch(IOException e) { e.printStackTrace(); } } public static void showEncoding(String nomFichier) throws FileNotFoundException, IOException { try(FileReader reader = new FileReader(nomFichier)) { System.out.println(nomFichier+" "+reader.getEncoding()); } } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Le resultat est :
UTF-8
country_codes_iso.csv UTF8
POP.csv UTF8
rawdata_2147.txt UTF8
Ok, donc le charset par défaut est UTF-8 mais ton fichier n'est pas en UTF-8. Si tu n'as pas eu l'erreur avant, c'est que ton code précédent n'arrivait même pas à la ligne "incompatible", celle où ça plante.
Il te faut connaître l'encodage de tes fichiers, ou les convertir en UTF-8.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Ils viennent d'où ces fichiers ? Il est absolument nécessaire de connaître l'encodage d'un fichier texte pour le lire. Si tu ne connais pas l'encodage et que tu ne sais pas comment le déterminer, il va falloir essayer différents encodages. En tout cas, je ne peux pas le deviner pour toi, surtout sans avoir ces fichiers.
Essaye par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part try(BufferedReader reader=Files.newBufferedReader(Paths.get(file),StandardCharsets.ISO_8859_1)) {
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
D'internet je suppose ? C'est mon prof qui nous les a fourni..
Ca m'enlève l'erreur avec ca, mais du coup ca me met ceci :
Essaye par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part try(BufferedReader reader=Files.newBufferedReader(Paths.get(file),StandardCharsets.ISO_8859_1)) {
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at world.WorldList.collect(WorldList.java:39)
at world.WorldList.countries(WorldList.java:60)
at world.WorldList.searchByCountryName(WorldList.java:73)
at world.WorldTest.testOperations(WorldTest.java:35)
at world.WorldTest.testWorldArrayList(WorldTest.java:23)
at world.WorldTest.main(WorldTest.java:15)
Ca concerne cette ligne apparemment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part String value = data[dataIndex];
Il aurait pu vous fournir des fichiers UTF-8, ou au moins avoir la décence de vous indiquer l'encodage !
C'est toujours le même problème (déjà vu plusieurs fois) : tu essayes d'accèder à une valeur dans un tableau à un index qui n'existe pas. Ici, une valeur en position 2 dans un tableau qui a mons de 2 valeurs. Vu qu'on a vu déjà maintes fois ce problème, tu ne devrais plus avoir besoin de demander comment corriger le problème.
- il faut déterminer sur quel fichier, il y a le problème (le fichier 1, le 2 ou le 3) ;
- ensuite voir si la ligne est une ligne d'entête (comme tu avais déjà dans un autre cas) : si c'est ça, alors tu peux utiliser le paramètre lineToSkip pour indiquer le nombre de lignes d'entêtes à sauter ;
- sinon, c'est une ligne de données qui n'a pas la même taille que les autres (pas le même nombre de données que les autres). De deux choses l'une, soit le format est prévu comme ça (et il faut gérer le cas, avec des if ()), soit c'est le découpage qui n'est pas bon (l'expression régulière ne tient pas compte de tous les cas possibles), soit le fichier est pourri (il y a des lignes qui n'ont pas assez de données).
Tu peux faire comme ça, au moins ça plantera plus sur ce problème et ça signalera les lignes qui n'ont pas assez de données (tu pourras voir s'il y a des lignes qui ne fonctionne pas mais qui devraient fonctionner) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public static void collect(String file, int lineToSkip, String splitString, int dataIndex, String countryName, int countryIndex, Map<String, Map<String,String>> map) throws IOException { try(BufferedReader reader=Files.newBufferedReader(Paths.get(file),Charset.defaultCharset())) { for(String line = reader.readLine(); line!=null; line=reader.readLine()) { if ( lineToSkip>0 ) { // on saute les lignes au début lineToSkip--; continue; } final String[] data = line.split(splitString); if ( dataIndex>=data.length) { System.err.println("Ligne ignorée (pas assez de données): " + data.length+"<="+ dataIndex + " " + Arrays.toString(data)); } else { String value = data[dataIndex]; if( countryIndex==-1 ) { final Map<String,String> dataMap=new HashMap<>(); dataMap.put(countryName, value); map.put(value, dataMap); } else { if ( countryIndex>=data.length) { System.err.println("Ligne ignorée (pas assez de données pour le pays): " + data.length+"<="+ countryIndex + " "+ Arrays.toString(data)); } else { final Map<String,String> dataMap=map.get(data[countryIndex]); if ( dataMap!=null ) { dataMap.put(countryName, value); } } } } } } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Oui, surtout que l'informatique n'est pas notre matière principale, je trouve ce projet assez compliqué pour des étudiants qui ne sont pas en info de base..
J'ai modifié le try, avec le StandardCharsets.ISO_8859_1 du coup.. mais j'ai l'impression qu'il saute tout le fichier, ce que tu as demandé d'afficher "Ligne ignorée (pas assez de données): 0<=1 []" s'affiche plusieurs fois pour au final me dire que le pays "France" par exemple, n'existe pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public static void collect(String file, int lineToSkip, String splitString, int dataIndex, String countryName, int countryIndex, Map<String, Map<String,String>> map) throws IOException { try(BufferedReader reader=Files.newBufferedReader(Paths.get(file),Charset.defaultCharset())) { for(String line = reader.readLine(); line!=null; line=reader.readLine()) { if ( lineToSkip>0 ) { // on saute les lignes au début lineToSkip--; continue; } final String[] data = line.split(splitString); if ( dataIndex>=data.length) { System.err.println("Ligne ignorée (pas assez de données): " + data.length+"<="+ dataIndex + " " + Arrays.toString(data)); } else { String value = data[dataIndex]; if( countryIndex==-1 ) { final Map<String,String> dataMap=new HashMap<>(); dataMap.put(countryName, value); map.put(value, dataMap); } else { if ( countryIndex>=data.length) { System.err.println("Ligne ignorée (pas assez de données pour le pays): " + data.length+"<="+ countryIndex + " "+ Arrays.toString(data)); } else { final Map<String,String> dataMap=map.get(data[countryIndex]); if ( dataMap!=null ) { dataMap.put(countryName, value); } } } } } } }
Ça, ça veut dire qu'il y a des lignes vides dans le fichier. Ça ne facilite pas le traitement, mais à la limite, ce n'est pas une anomalie si gênante que ça. On pourrait éliminer d'office les lignes vides à la lecture.
C'est dans quel fichier ? Le 2 ou le 3. A la limite, ce n'est pas peut-être une anomalie. Peut-être que toutes les données n'existent pas pour tous les pays. Cela dit si l'enoncé en faisait état, ce serait tout de même mieux. La question est de savoir si c'est normal ou pas. Dans toutes les lignes qui s'affichent tu ne vois nulle part le nom "France" ? Si tu ouvres le fichier dans un éditeur de texte et que tu recherches le mot France, est-ce qu'il est présent ou pas ? Serait-il présent avec une casse différente ?
Ensuite, s'il est normal que toutes les informations n'existent pas pour tous les pays, la question est de savoir comment tu dois le traiter : ignorer ces pays incomplets ou signaler ces pays (et la propriété manquante).
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Ah non du tout, il est bien présent dans tous les fichiers, et quoiqu'il advienne si une information est inconnue, la case correspondante dans le fichier n'est pas nulle, il y a tout de même écrit soit "inconnu" soit "0"
Je viens de réessayer avec un autre pays, et c'est le même résultat
Tu peux me coller tes fichiers en pièces jointes que je jette un coup d'œil ?
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
rawdata_2147.txt
Seul le fichier txt peut s'envoyer, les csv ne fonctionnent pas..
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager