Comparaison d'adresse IP

Comparaison d'adresse IP - VB/VBA/VBS - Programmation

Marsh Posté le 10-02-2016 à 15:33:39    

Bonjour à tous,
 
J'ai une liste de 14 000 adresse IP à comparer à une autre liste de 1 800 adresse IP. J'ai donc décider de créer un script en vbs pour m'aider à comparer mes deux listes d'adresse. Cependant mon script ne marche pas. Il créer bien les deux fichiers mais ma condition IF ne marche pas. J'ai donc penser qu'il fallait faire une double condition mais je ne sais pas ou ni comment la coder  :??: . Je serais ravi si quelqu'un pouvait m'aider.
 
Voici mon code :
 
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objFile = objFSO.OpenTextFile("C:\script\tout.txt", 1)
Set ficok= objFSO.CreateTextFile("C:\script\srvok.txt", 2)
Set ficerror= objFSO.CreateTextFile("C:\script\srvechec.txt", 2)
Do until objFile.AtEndOfStream
        ligne = objFile.ReadLine
        Champs = SPLIT(ligne, ";", -1, 1)
        ipsrv = Champs(0)
        ipsite = Champs (3)
            if ipsrv = ipsite then
                toto = Champs (1)
                site = Champs (2)
                srvok = site & ";" & toto & ";" & ipsrv
                ficok.WriteLine srvok
            else
                srv = "Le serveur : " & ipsrv & " n'existe pas dans la liste"  
                ficerror.WriteLine srv
            End If
Loop
objFile.Close
 
 
Voici également un extrait de mon document :
IP-SRV; toto; site; IP-SITE
"10.0.0.1";x;truc; "10.19.5.0"
"2.1.5.0"; x; machin; "10.19.9.0"
"10.9.3.0"; x; chose; "1.1.2.0"
"5.1.8.0"; x; bidule; "10.0.0.1"
 
Voilà, vous savez tout.
 
Merci par avance si quelqu'un peut m'aider.  
 

Reply

Marsh Posté le 10-02-2016 à 15:33:39   

Reply

Marsh Posté le 11-02-2016 à 13:57:17    

Salut,
 
Que cherches-tu à comparer exactement ?
 
Parce que tu nous parles de deux listes (14 000 et 1 800 adresses IP) mais ton extrait de document n'est composé que d'une seule liste avec deux colonnes. Ce n'est pas tout à fait pareil.
 
La, ton script compare pour une même ligne que l'adresse IP de début est la même que celle de fin de ligne.
 
Est-ce ce que tu veux faire ?

Reply

Marsh Posté le 11-02-2016 à 14:07:02    

 
            Bonjour,
 
            même pensée, une simple question de logique élémentaire car le code fonctionne,
            il accomplit juste la demande et si le résultat n'est pas au rendez-vous, la logique est donc erronée !
 
            Sans explication claire et exhaustive, aucune aide possible …
 

Reply

Marsh Posté le 11-02-2016 à 14:20:35    

Bonjour,  
 
J'ai créer un document texte qui comporte des lignes séparer par des points virgules. Le but de mon code est de prendre la première adresse (situé dans la première colonne) et de la comparer à toutes celles de l'autre liste (situé dans la quatrième colonne).  
Si il y a une correspondance, il me l'ajoute dans le document srvok sinon il me l'ajoute dans le document srvechec.
 
Sauf que mon code ne marche pas et que je n'ai pas assez de connaissance en programmation pour trouver comment résoudre mon problème.


Message édité par chinou44 le 11-02-2016 à 14:21:25
Reply

Marsh Posté le 11-02-2016 à 19:50:53    

 
            As-tu au moins compris ce que réalise ton code ?‼
            Comme déjà évoqué par Chelmi18, cela n'a rien à voir avec ton besoin !
 
            Et si ton fichier comporte par ligne une adresse en colonne 1 et une autre en colonne 4, comment expliquer alors
            dans ton post initial « j'ai une liste de 14 000 adresse IP à comparer à une autre liste de 1 800 adresse IP » ?‼‼
 
 

Reply

Marsh Posté le 12-02-2016 à 08:56:36    

Et j'ajouterais que si ce que tu veux faire est comparer chaque adresse de la liste de gauche avec chaque adresse de celle de droite, il te faut une double boucle.
 
En français, ça donnerait :
 
Pour chaque IP_Gauche
    Pour chaque IP_Droite
        Si IP_Gauche = IP_Droite
        Fin SI
    IP_Droite suivante
IP_Gauche suivante
 
Avec ça tu devrais y voir plus clair sur la logique à mettre en place.
 
Comme dit Marc, il faut commencer par bien poser le problème pour espérer trouver une solution. :pt1cable:

Reply

Marsh Posté le 12-02-2016 à 10:46:24    

 
            chinou44, si tu disposes d'Excel, tu n'as presque pas besoin de code !
            Après importation des données séparées en colonne, une simple formule de calculs via RECHERCHEV ou EQUIV
            ou encore séparation des données dans deux autres feuilles via des filtres avancés (niveau débutant).
            Tout dépend du besoin final …
 

Reply

Marsh Posté le 12-02-2016 à 15:05:04    

Bonjour,
J'ai un peu avancé sur mon code et j'en suis venu à l'idée de créer un tableau et à le remplir avec les éléments de mon document texte. Voici le code mis à jour :
 
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objFile = objFSO.OpenTextFile("chemin fichier", 1)
Set ficok= objFSO.CreateTextFile("chemin fichier", 2)
Set ficerror= objFSO.CreateTextFile("chemin fichier", 2)
Dim tab  
tab = Array (14251,5)
Do until objFile.AtEndOfStream
        ligne = objFile.ReadLine
        Champs = SPLIT(ligne, ";", -1, 1)
                ip1 = Champs(0)
                ip2 = Champs(3)
    for i=1 to 14251
     for j=1 to 5
     tab(i,j)=Champs(j)
     Next
    Next
     For Each ip1in tab
     For Each ip2 in tab      
      if tab(i,0) = tab(i,3) then
       truc = Champs (2)
       srvok = ip1 & ";" & truc
       ficok.WriteLine srvok
      else
       srv = "Le serveur : " & ip1 & " n'existe pas dans la liste"  
       ficerror.WriteLine srv  
      End If
     Next  
    Next    
Loop
objFile.Closec
 
Mais disons que sa ne marche toujours pas :??:. Il n'arrive pas à remplir mon tableau avec les informations du documents.
Mon idée étant de suivre le commentaire de Chelmi 18 :
Pour chaque IP_Gauche  
    Pour chaque IP_Droite  
        Si IP_Gauche = IP_Droite  
        Fin SI  
    IP_Droite suivante  
IP_Gauche suivante  
 
Sauf que pour sa, je dois créer un tableau avant et je n'arrive pas à le remplir.  
Sa fait maintenant 2 semaines que je travailles sur ce script et je commence à désespérer.  
Marc L en réponse à ta proposition d'utiliser excel, ce n'ai pas possible. Je dois absolument produire un script pour résoudre mon problème.
 
Merci pour vos messages Chinou


Message édité par chinou44 le 12-02-2016 à 15:07:49
Reply

Marsh Posté le 12-02-2016 à 19:47:43    

 
            Comme tu n'as toujours pas balisé le code via l'icône dédiée (conformément aux règles du forum),
            je vais en rester sur l'idée générale : réfléchir donc un minimum avant d'écrire la moindre ligne de code ‼
            Aucune logique viable dans le code, ce n'est pas compliqué de s'écrire une logique sur papier
            pour vérifier si elle tient la route !         Car sans cette étape, tous tes codes sont bons pour la corbeille …
            La preuve et pas étonnant les deux semaines, persévère sans logique et tu atteindras le mois !
 
            Avec deux sous de jugeote, lire d'abord l'intégralité du fichier, si tu veux séparer les adresses dans deux variables tableau
            (j'utiliserais plutôt des dictionnaires) et seulement une fois le fichier lu et fermé, comparer les adresses …
 

Reply

Marsh Posté le 17-02-2016 à 08:59:43    

Vu ton code, tu n'as toujours pas compris comment séparer tes IPs de gauche et tes IPs de droite ! :non:  
 
Il te faut deux tableaux, deux boucles, deux je ne sais quoi si tu veux parcourir tes listes indépendamment l'une de l'autre.
 
Exemple, en reprenant le dernier bout de code ci-dessus, pour déclarer et remplir tes 2 tableaux
 

Code :
  1. Dim tab_Gauche, Dim tab_Droite
  2. tab_Gauche = Array (14251,1)
  3. tab_Droite = Array (14251,1)
  4. indice_Gauche = 0
  5. indice_Droite = 0
  6. Do until objFile.AtEndOfStream
  7.         ligne = objFile.ReadLine
  8.         Champs = SPLIT(ligne, ";", -1, 1)
  9.         indice_Gauche = indice_Gauche + 1
  10.         tab_Gauche(indice_Gauche) = Champs(0)
  11.         indice_Droite = indice_Droite + 1
  12.         tab_Droite(indice_Droite)= Champs(3)
  13. Une fois tes tableaux remplis, tu recommences deux boucles imbriquées pour les relire ...


 
Comme le dit Marc L, poses toi deux secondes et réfléchis à la logique de ce que tu veux faire avant de coder la moindre ligne, sinon tu n'y arriveras pas ...


Message édité par Chelmi18 le 17-02-2016 à 09:00:50
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed