Retourner une valeur d'un fichier txt
jj1k
Messages postés
32
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
- 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é");
}
}