Retourner une valeur d'un fichier txt
jj1k
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
comment je peux lire un fichier txt pour retourner le cout de chaque ligne en entrant en paramétre ville origine et ville destination .
affiche(origine,destination)=cout ?
Merci d'avance
comment je peux lire un fichier txt pour retourner le cout de chaque ligne en entrant en paramétre ville origine et ville destination .
affiche(origine,destination)=cout ?
Merci d'avance
A voir également:
- Retourner une valeur d'un fichier txt
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Retourner ecran pc - Guide
- Fichier rar - Guide
4 réponses
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.
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
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 }
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
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
Ç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é"); } }