Fusionner 2 tableaux
Fermé
Utilisateur anonyme
-
11 sept. 2011 à 21:15
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 12 sept. 2011 à 12:17
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 12 sept. 2011 à 12:17
A voir également:
- Fusionner 2 tableaux
- Fusionner 2 tableaux excel - Guide
- Comment fusionner 2 pdf - Guide
- Fusionner 2 cellules excel - Guide
- Tableaux croisés dynamiques - Guide
- 2 ecran pc - Guide
4 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
11 sept. 2011 à 21:53
11 sept. 2011 à 21:53
Quand tu as 5000 valeurs, il faut virer les tableaux et regarder les Collection.
Pour résoudre tout tes problèmes construit toi une bonne fois pour toutes des classes, par exemple R et S (que tu créeras à partir de tes lignes R et S) dont tu construiras tes objets à partir des lignes de ton fichier. Et T les objets qui seront issus de la fusion de deux objets R et S compatibles.
Exemple :
Comme ça tu oublies tes tableaux et tu utilises des Collection (éventuellement triées pour être plus efficace)
Tu auras alors un code comme ceci :
Si tu fais ton code orienté objet, tu vas rapidement résoudre bon nombre de tes problèmes, là tu perds tout l'intérêt d'utiliser le langage Java !
Pour résoudre tout tes problèmes construit toi une bonne fois pour toutes des classes, par exemple R et S (que tu créeras à partir de tes lignes R et S) dont tu construiras tes objets à partir des lignes de ton fichier. Et T les objets qui seront issus de la fusion de deux objets R et S compatibles.
Exemple :
public class R { public final String passerelle, partenaire, destination... public R(String ligneFichier) { // initialisation de tous les champs à partir de la ligne du fichier // facile à faire avec Scanner } }
Comme ça tu oublies tes tableaux et tu utilises des Collection (éventuellement triées pour être plus efficace)
Tu auras alors un code comme ceci :
private boolean compatible(R r, S s) { return r.passerelle.equals(s.passerelle) && ... } public void fich(Collection<R> cr, Collection<S> cs, Collection<T> ct) { for (R r : cr) // la double boucle est lourde d'un point de vue complexité for (S s : cs) // si tu peux trier tes valeurs tu y gagneras en rapidité if (compatible(r,s)) ct.add(new T(r,s)); }
Si tu fais ton code orienté objet, tu vas rapidement résoudre bon nombre de tes problèmes, là tu perds tout l'intérêt d'utiliser le langage Java !
Utilisateur anonyme
12 sept. 2011 à 01:59
12 sept. 2011 à 01:59
Salut, je n'ai pas bien compris ce que vous m'avez écrit,vous pouvez m'écrire svp un code qui me permet de changer le mien svp?
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
12 sept. 2011 à 08:35
12 sept. 2011 à 08:35
Bonjour
Ce qu'explique KX, c'est l'utilisation des classes et interfaces du package java.util
http://download.oracle.com/javase/1.4.2/docs/api/java/util/package-summary.html
Certaines classes permettent de gérer des tableaux de données de manière dynamique. comme des ArrayList par exemple ou les collections. Ce sont des structures de données.
Pas mal d'exemples ici
http://www.java-examples.com/java-collections-and-data-structures-(-java.util-package-)
Ce qu'explique KX, c'est l'utilisation des classes et interfaces du package java.util
http://download.oracle.com/javase/1.4.2/docs/api/java/util/package-summary.html
Certaines classes permettent de gérer des tableaux de données de manière dynamique. comme des ArrayList par exemple ou les collections. Ce sont des structures de données.
Pas mal d'exemples ici
http://www.java-examples.com/java-collections-and-data-structures-(-java.util-package-)
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
12 sept. 2011 à 12:17
12 sept. 2011 à 12:17
Voici un code d'exemple, à toi de remanier (je me répète) les expressions régulières pour bien lire ton fichier, mais vu qu'ici ta question porte sur la fusion des tableaux, on va dire qu'on peut passer outre ce problème...
Un programmeur averti remarquera tout de suite qu'il est beaucoup plus simple à comprendre, à modifier, et pire : à écrire (!) que ton code avec des indices de tableaux partout, où l'on ne sait plus ce qui correspond à quoi ! Et en plus : c'est plus efficace...
Un programmeur averti remarquera tout de suite qu'il est beaucoup plus simple à comprendre, à modifier, et pire : à écrire (!) que ton code avec des indices de tableaux partout, où l'on ne sait plus ce qui correspond à quoi ! Et en plus : c'est plus efficace...
import java.io.File; import java.io.FileNotFoundException; import java.util.Collection; import java.util.LinkedList; import java.util.Scanner; import java.util.regex.MatchResult; class R { public final String machineSource, passerelle, identifiant, dateEnvoi, nomFichier; public R(String ligneFichier) { Scanner sc = new Scanner(ligneFichier); sc.findInLine("RSF (\\w+) (?:\\w+) ..."); // TODO MatchResult mr = sc.match(); machineSource = mr.group(0); passerelle = mr.group(1); identifiant = mr.group(2); dateEnvoi = mr.group(3); nomFichier = mr.group(4); sc.close(); } } class S { public final String machineDestination, passerelle, identifiant, dateReception, nomFichier; public S(String ligneFichier) { Scanner sc = new Scanner(ligneFichier); sc.findInLine("SRF (?:\\w+) (\\w+) ..."); // TODO MatchResult mr = sc.match(); passerelle = mr.group(0); machineDestination = mr.group(1); identifiant = mr.group(2); dateReception = mr.group(3); nomFichier = mr.group(4); sc.close(); } } class T { public final String machineSource, machineDestination, dateEnvoi, dateReception, identifiant, nomFichier; public static boolean compatibles(R r, S s) { return r.dateEnvoi.equals(s.dateReception) && r.identifiant.equals(s.identifiant) && r.nomFichier.equals(s.nomFichier); } public T(R r, S s) { machineSource=r.machineSource; machineDestination=s.machineDestination; dateEnvoi=r.dateEnvoi; dateReception=s.dateReception; identifiant=r.identifiant; nomFichier=r.nomFichier; } } public class Test { public static final File REP = new File("C:\\CFT"); public static void lireFichier(File fichier, Collection<R> cr, Collection<S> cs) throws FileNotFoundException { Scanner sc = new Scanner(fichier); while (sc.hasNextLine()) { String ligne = sc.nextLine(); if (ligne.startsWith("RSF")) cr.add(new R(ligne)); else if (ligne.startsWith("SRF")) cs.add(new S(ligne)); } sc.close(); } public static void fusionner(Collection<R> cr, Collection<S> cs, Collection<T> ct) { for (R r : cr) for (S s : cs) if (T.compatibles(r, s)) ct.add(new T(r,s)); } public static void main(String...args) { Collection<R> cr = new LinkedList<R>(); Collection<S> cs = new LinkedList<S>(); for (File f : REP.listFiles()) { try { lireFichier(f,cr,cs); } catch (FileNotFoundException e) { System.err.println(e); } } Collection<T> ct = new LinkedList<T>(); fusionner(cr,cs,ct); for (T t : ct) System.out.println(t); // TODO : redéfinir toString dans T } }