Comparaison d'adresse IP - VB/VBA/VBS - Programmation
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 ?
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 …
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.
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 » ?‼‼
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.
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 …
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
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 …
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 !
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 :
|
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 ...
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.