Fusionner 2 tableaux
Utilisateur anonyme
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
SVP, aidez-moi, j'ai créée 3 tableaux en mémoire en utilisant le langage java (le tableau se, re2 et re1)
String se[][]=new String[5000][6];
String re2[][]=new String[5000][6];
String re1[][]=new String[5000][6];
je voudrais savoir comment je peux fusionner les lignes des tableaux (se et re2) pour les afficher dans un seul tableau re1
voila le code que j'ai fait mais ca n'a pas marché
//une méthode qui permet de remplir le tableau re1
private int fich (String se[][],int n,String re2[][],int m2,String se2[][],int n1,String re[][],int m, String re1[][]) {
int j=0;
for(int l=0;l<n;l++){
for(int i=0;i<m;i++){
if(se[l][4].equals(re2[i][3]) && se[l][2].equals(re2[i][2]) && se[l][5].equals(re2[i][5]) ){
re1[j][0]=se[l][0] ;
re1[j][1]=re2[i][1];
re1[j][2]=re2[i][2];
re1[j][3]=re2[i][3];
re1[j][4]=se[l][4];
re1[j][5]=re2[i][5];
j++;}
}
}
for(int l=0;l<n;l++){
for(int i=0;i<m;i++){
if(se2[l][4].equals(re[i][3]) && se[l][2].equals(re[i][2]) && se[l][5].equals(re[i][5]) ){
re1[j][0]=se2[l][0];
re1[j][1]=re[i][1];
re1[j][2]=se2[i][2];
re1[j][3]=re[i][3];
re1[j][4]=se2[l][4];
re1[j][5]=re[i][5];
j++;}
}
}
return j;
}
SVP, aidez-moi, j'ai créée 3 tableaux en mémoire en utilisant le langage java (le tableau se, re2 et re1)
String se[][]=new String[5000][6];
String re2[][]=new String[5000][6];
String re1[][]=new String[5000][6];
je voudrais savoir comment je peux fusionner les lignes des tableaux (se et re2) pour les afficher dans un seul tableau re1
voila le code que j'ai fait mais ca n'a pas marché
//une méthode qui permet de remplir le tableau re1
private int fich (String se[][],int n,String re2[][],int m2,String se2[][],int n1,String re[][],int m, String re1[][]) {
int j=0;
for(int l=0;l<n;l++){
for(int i=0;i<m;i++){
if(se[l][4].equals(re2[i][3]) && se[l][2].equals(re2[i][2]) && se[l][5].equals(re2[i][5]) ){
re1[j][0]=se[l][0] ;
re1[j][1]=re2[i][1];
re1[j][2]=re2[i][2];
re1[j][3]=re2[i][3];
re1[j][4]=se[l][4];
re1[j][5]=re2[i][5];
j++;}
}
}
for(int l=0;l<n;l++){
for(int i=0;i<m;i++){
if(se2[l][4].equals(re[i][3]) && se[l][2].equals(re[i][2]) && se[l][5].equals(re[i][5]) ){
re1[j][0]=se2[l][0];
re1[j][1]=re[i][1];
re1[j][2]=se2[i][2];
re1[j][3]=re[i][3];
re1[j][4]=se2[l][4];
re1[j][5]=re[i][5];
j++;}
}
}
return j;
}
A voir également:
- Fusionner 2 tableaux
- Fusionner 2 tableaux excel - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Comment fusionner des pdf sans logiciel - Guide
- Fusionner 2 cellules excel - Guide
- Tableaux croisés dynamiques - Guide
4 réponses
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 !
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?
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-)
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
}
}