IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Comparaison de deux tableaux en VB6


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Comparaison de deux tableaux en VB6
    Bonjour,
    J'ai un Tableau1 et un Tableau2 qui contiennent des String.
    Et j'aimerais savoir, s'il y a une methode simple qui permettrait de creer deux autres tableaux,
    avec dans le 1er tous les elements du taleau1 qui ne sont pas dans Tableau2,
    et dans le deuxieme tous les elements du Taleau2 qui ne sont pas dans Tableau1.
    J'ai pense a deux boucles imbriquees l'une dans l'autre mais il y aura plein d'elements dans Tableau1 et Tableau2 et donc ca sera trop long.
    Merci

    Raphael

  2. #2
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tes tableaux 1 et 2 sont ils triés ? Si oui, tu n'as pas besoin de faire une comparaison sur tous les éléments.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui les tableaux sont tries et je vois bien comment faire mais j'ai l'impression que c'est un peu trop bourin!
    Et il y a surement une Methode deja toute faite et plus rapide pour resortir les differences, non?
    Merci

  4. #4
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Si tu vois bien comment faire, peux tu nous dire ce que tu vois ? On pourra peut etre te dire ensuite si on trouve ça bourrin ou pas...
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Donc j'ai tape ce que j'imaginais et avec peu de fichier ca marche bien mais j'ai peur que plus tard quand il y aura beaucoup plus de fichiers ca soit long a executer.
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Dim I, J, Max1, Max2  As Integer
    Dim nomfichier1 , nomfichier2 As String
    Dim Table1(), Table2() As String
    Dim Tableau1(), Tableau2() A String
     
    Table1(0) = "fichier1"
    Table1(1) = "fichier3"
    Table1(2) = "fichier5"
    Table2(0) = "fichier1"
    Table2(1) = "fichier2"
    Table2(2) = "fichier5"
    Max1 = Len(Table1)
    Max2 = Len(Table2)
     
    For I = 1 To Max1 Step 1
        nomfichier1 = nomfichier1 & Table1(I) & "@@"
    Next
     
    For J = 1 To Max2 Step 1
        nomfichier2 = nomfichier2 & Table2(J) & "@@"
    Next
     
    nomfichier1 = Left(nomfichier1 , Len(nomfichier1 ) - 2)
    nomfichier2 = Left(nomfichier2 , Len(nomfichier2 ) - 2)
     
    For I = 1 To Max1 Step 1
        For J = 1 To Max2 Step 13
     
            If Table1(I) = Table2(J) Then
                nomfichier1 = Replace(nomfichier1 , Table1(I), "", 1, -1, vbTextCompare)
                nomfichier2 = Replace(nomfichier2 , Table1(I), "", 1, -1, vbTextCompare)
            End If
        Next
    Next
     
    Tableau1 = Split(nomfichier1 , "@@", -1, vbTextCompare)
    Tableau2 = Split(nomfichier2 , "@@", -1, vbTextCompare)
    Juste vous aurez remarquer que au lieu de travailler sur les tableau, j'ai tout mis dans un string ce qui me permet de supprimer les fichier commun en les remplacant par ""

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tu as vraiment essayé ce code sous vb ?
    Ca donne quoi 'Len(Table1)' ?

    Si je m'amuse à relever tous les endroits où ton code va planter, la liste va être assez fournie, quelques exemples :
    - Dim Tableau1(), Tableau2() A String
    Il faudrait 'As' au lieu de 'A'
    - Max1 = Len(Table1)
    J'imagine que tu parles de Ubound plutot que Len
    - Table1(0) = "fichier1"

    Le tableau n'étant pas dimensionné précisément, ça va coincer avec un beau 'indice en dehors de la plage'
    - Les boucles for i... next et For J ... next
    Elles commencent à 1 alors que tu démarre l'indice de tes tableaux à 0.

    Ensuite, pour etre honnete, je n'ai pas trop cherché à analyser la suite du code parce que je pense qu'il faudrait d'abord que tu éclaircisse un peu ta méthode ou que tu nous explique au moins le principe de celle ci.
    Je te demandais si tu triais tes tableaux car alors tu n'as pas besoin de comparer tous les éléments d'un tableau avec tous les éléments de l'autre, si tu as vraiment beaucoup d'éléments, il est PEUT ETRE plus rapide d'aller comparer uniquement ceux dont la première lettre est commune et donc d'aller chercher d'abord l'indice du premier élément qui a la première lettre commune par exemple.


    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui merci,
    En fait pour tout dire, je travaille sur un (plutot) gros projet en Irlande en VB.
    Et j'ai donc du selectionner une partie de mon code et changer plein de choses pour mettre mon code sur le forum.
    En realite les valeurs que je concatenne dans les string ne viennent pas d'un tableau mais d'autre part (trop long de tout expliquer, et ne sert à rien je pense), c'est pour ca que pour presenter mon raisonnement j'ai rajoute vite fait ces tableaux.
    Concernant les noms de fichiers je ne sais pas encore quelle forme ils auront vraiment mais il semblerait qu'ils soient tres long et que seul des noms de pays et un chiffre changent d'un fichier à l'autre. Donc je pense que les 10 1er caratere seront identique à chacun (en tout cas les fichiers exemples qu'il m'a ete fournis sont ainsi).
    Donc certe j'ai fait ces quelques erreurs en retapant vite fait le code.
    Mais c'etait principalement pour vous expliquer le raisonnement que je ne trouve pas optimal.
    Ca ne me dit toujours pas s'il y aurais une fonction qui ferait ce calcul directement. (dans Java, je crois qu'il y a un truc du genre).
    Ce qui m'interesserais c'est quelque chose du genre :

    TableauDesElementEnTropDansTablo1ParRapportATablo2 = FonctionQuiDonneLesDiferences(Tablo1, Tablo2, Options...)

    Ca serait pratique!

    Sinon,...., je garde ce que j'ai fait et qui marche bien pour le moment avec mes 10 fichiers.

    Merci

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Code corrige et commente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Dim I  As Integer, J  As Integer, Max1  As Integer, Max2  As Integer
    Dim nomfichier1 As String, nomfichier2 As String
    Dim Tablo1(2) As String, Tablo2(3) As String
    Dim Tableau1() As String, Tableau2() As String
     
    Tablo1(0) = "fichier1"
    Tablo1(1) = "fichier3"
    Tablo1(2) = "fichier5"
    Tablo2(0) = "fichier1"
    Tablo2(1) = "fichier2"
    Tablo2(2) = "fichier5"
    Max1 = 1
    Max2 = 2
     
    'Je concatenne tous les noms de fichiers de Tablo1 dans le string
    'nomfichier1 en les separant par @@
    For I = 0 To Max1 Step 1
        nomfichier1 = nomfichier1 & Tablo1(I) & "@@"
    Next
     
    'Je concatenne tous les noms de fichiers de Tablo2 dans le string
    'nomfichier2 en les separant par @@
    For J = 0 To Max2 Step 1
        nomfichier2 = nomfichier2 & Tablo2(J) & "@@"
    Next
     
    'Je supprime les deux derniers caracteres (@@) de chacune des 2 strings
    nomfichier1 = Left(nomfichier1 , Len(nomfichier1 ) - 2)
    nomfichier2 = Left(nomfichier2 , Len(nomfichier2 ) - 2)
     
    'Je compare un à un tous les noms de fichiers de Tablo1 et Tablo2
    'et des qu'il y a le meme dans les deux je l'enleve des deux strings ainsi que 
    'les deux @@ en trop
    For I = 1 To Max1 Step 1
        For J = 1 To Max2 Step 1
     
            If Tablo1(I) = Tablo2(J) Then
                nomfichier1 = Replace(nomfichier1 , Table1(I), "", 1, -1, vbTextCompare)
                nomfichier2 = Replace(nomfichier2 , Table1(I), "", 1, -1, vbTextCompare)
                nomfichier1 = Replace(nomfichier1 , "@@@@", "@@", 1, -1, vbTextCompare)
                nomfichier2 = Replace(nomfichier2 , "@@@@", "@@", 1, -1, vbTextCompare)
            End If
        Next
    Next
     
    'Je divise les 2 strings dans deux tableaux avec @@ comme separateurs
    Tableau1 = Split(nomfichier1 , "@@", -1, vbTextCompare)
    Tableau2 = Split(nomfichier2 , "@@", -1, vbTextCompare)

Discussions similaires

  1. Comparaison de deux tableaux de string
    Par TrucMachinChose dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/09/2011, 09h25
  2. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  3. Comparaison de deux tableaux
    Par tibss dans le forum Excel
    Réponses: 1
    Dernier message: 06/05/2009, 21h30
  4. Comparaison de deux tableaux
    Par solorac dans le forum Excel
    Réponses: 7
    Dernier message: 03/08/2007, 08h49
  5. Comparaison de deux tableaux
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 27/06/2006, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo