Retourner une valeur d'un fichier txt
Fermé
jj1k
Messages postés
30
Date d'inscription
jeudi 8 juin 2017
Statut
Membre
Dernière intervention
3 septembre 2017
-
15 juin 2017 à 18:56
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 16 juin 2017 à 09:56
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 16 juin 2017 à 09:56
A voir également:
- Retourner une valeur d'un fichier txt
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Retourner ecran windows - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
4 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
15 juin 2017 à 20:42
15 juin 2017 à 20:42
Bonjour,
À quoi ressemble ton fichier texte ?
Quelles sont les informations qui t'intéressent sur chaque ligne ?
A priori il faudrait charger le fichier texte une seule fois au démarrage de l'application et ensuite travailler sur des données déjà en mémoire sans avoir à les traiter à nouveau après.
À quoi ressemble ton fichier texte ?
Quelles sont les informations qui t'intéressent sur chaque ligne ?
A priori il faudrait charger le fichier texte une seule fois au démarrage de l'application et ensuite travailler sur des données déjà en mémoire sans avoir à les traiter à nouveau après.
jj1k
Messages postés
30
Date d'inscription
jeudi 8 juin 2017
Statut
Membre
Dernière intervention
3 septembre 2017
15 juin 2017 à 23:44
15 juin 2017 à 23:44
Le format de mon fichier est comme ça
id,origin,destination,cost
0,1,1,0
1,1,1252,3
2,1,1267,7
3,1,1730,13
4,1,329,17
Moi je veux faire un distance qui renvoie la valeur
dist( 1,1)= 0
dist (1,1252)=3
dist (1,1267) = 7
comment je peux le faire ?
Merci
id,origin,destination,cost
0,1,1,0
1,1,1252,3
2,1,1267,7
3,1,1730,13
4,1,329,17
Moi je veux faire un distance qui renvoie la valeur
dist( 1,1)= 0
dist (1,1252)=3
dist (1,1267) = 7
comment je peux le faire ?
Merci
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
16 juin 2017 à 00:31
16 juin 2017 à 00:31
Un exemple en chargeant tes données dans un ensemble trié sur les deux valeurs d'origine et de destination.
Et le code de test :
import java.io.*; import java.nio.file.*; import java.util.*; public class Parcours implements Comparable<Parcours> { public final int id; public final int origin; public final int destination; public final int cost; private static final SortedSet<Parcours> ALL_DATAS = loadFile("C:/test.txt"); public Parcours(int id, int origin, int destination, int cost) { this.id = id; this.origin = origin; this.destination = destination; this.cost = cost; } public Parcours(String description) { String[] tab = description.split(","); id = Integer.parseInt(tab[0]); origin = Integer.parseInt(tab[1]); destination = Integer.parseInt(tab[2]); cost = Integer.parseInt(tab[3]); } @Override public int compareTo(Parcours p) { int res = Integer.compare(origin, p.origin); if (res != 0) return res; return Integer.compare(destination, p.destination); } private static SortedSet<Parcours> loadFile(String fileName) { try { return Files.lines(Paths.get(fileName)) .map(Parcours::new) .collect(TreeSet::new, (s, p) -> s.add(p), TreeSet::addAll); } catch (IOException e) { throw new UncheckedIOException(e); } } public static Optional<Parcours> find(int origin, int destination) { SortedSet<Parcours> r = ALL_DATAS.subSet( new Parcours(0, origin, destination, 0), new Parcours(0, origin, destination + 1, 0)); return r.isEmpty() ? Optional.empty() : Optional.of(r.first()); } }
Et le code de test :
public static void main(String[] args) { System.out.println(Parcours.find(1, 1730).get().cost); // 13 }
jj1k
Messages postés
30
Date d'inscription
jeudi 8 juin 2017
Statut
Membre
Dernière intervention
3 septembre 2017
16 juin 2017 à 00:54
16 juin 2017 à 00:54
il s'affiche cette exception
Exception in thread "main" java.lang.ExceptionInInitializerError
at v0.Test.main(Test.java:7)
Caused by: java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at v0.Parcours.<init>(Parcours.java:24)
at v0.Parcours$$Lambda$2/10754300.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.collect(Unknown Source)
at v0.Parcours.loadFile(Parcours.java:42)
at v0.Parcours.<clinit>(Parcours.java:13)
... 1 more
Exception in thread "main" java.lang.ExceptionInInitializerError
at v0.Test.main(Test.java:7)
Caused by: java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at v0.Parcours.<init>(Parcours.java:24)
at v0.Parcours$$Lambda$2/10754300.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.collect(Unknown Source)
at v0.Parcours.loadFile(Parcours.java:42)
at v0.Parcours.<clinit>(Parcours.java:13)
... 1 more
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
16 juin 2017 à 08:11
16 juin 2017 à 08:11
Il faudrait enlever la première ligne du fichier "id,origin,destination,cost" ou alors rajouter un peu de code pour gérer les cas où les lignes ne contiennent pas que des chiffres.
jj1k
Messages postés
30
Date d'inscription
jeudi 8 juin 2017
Statut
Membre
Dernière intervention
3 septembre 2017
16 juin 2017 à 08:26
16 juin 2017 à 08:26
j'ai enlevé la la premier ligne mais encore une autre exception
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Unknown Source)
at list.Parcours.main(Parcours.java:17)
et c'est ça la ligne 17
System.out.println(Parcours.find(1, 1730).get().cost); // 13
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Unknown Source)
at list.Parcours.main(Parcours.java:17)
et c'est ça la ligne 17
System.out.println(Parcours.find(1, 1730).get().cost); // 13
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
16 juin 2017 à 09:56
16 juin 2017 à 09:56
Ça veut dire qu'il n'a pas trouvé de valeurs avec 1 et 1730 dans le fichier texte, contrairement à ce que ton fichier d'exemple laissait penser...
Pour un code de test un peu plus complet tu peux faire :
Pour un code de test un peu plus complet tu peux faire :
public static void main(String[] args) { Optional<Parcours> optParcours = Parcours.find(1, 1730); if (optParcours.isPresent()) { Parcours parcours = optParcours.get(); System.out.println(parcours.cost); } else { System.out.println("parcours non trouvé"); } }