[VBS] Comparaison de fichiers (ligne par ligne)

PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009 - 7 juil. 2006 à 09:19
PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009 - 10 juil. 2006 à 13:08
Je cherche une fonction VBS qui permette de comparer 2 fichiers TEXTE ligne par ligne

9 réponses

PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009
7 juil. 2006 à 11:24
Je dois tout d'abord "épurer" un fichier avant de pouvoir effectuer une comparaison ligne/ligne avec un autre fichier.

Je pense qu'il faut que j'utilise des expressions régulières, mais je n'y connais pas grand chose.

Ma recherche doit débuter à partir de la 8eme ligne de mon fichier.
Ma chaine est précédée de 5 espaces.
Ma chaine est composée de 12 à 14 caractères "contigus", suivi de plusieurs espaces.

Comment faire pour "isoler" cette chaine ?

Ensuite, pour comparer 2 chaines de caractères (dans 2 fichiers différents), je ne sais pas si il je dois utiliser la fonction "StrComp" ou autre chose.

Merci d'avance
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 juil. 2006 à 10:28
Salut,

Tu as plusieurs questions dans une !

La démarche générale, consiste déjà à ouvrir les deux fichiers, gra^ce à la fonction OPEN... Puis lire les fichiers, grâce à "lineinput" par exemple, ce qui permettra de mettre dans des variables une partie du texte. Ensuite on fait la comparaison des variables... etc.... jusqu'à ce qu'on trouve une différence... Là, pour faire la différence il existe plusiseurs possibilités, comme souvent. Si on cherche juste une différence, l'utilisation d'un opérateur logique suffit... A$>B$....

Voilà dans les grandes lignes, la démarche... ensuite je te laisse rechercher combien on programme tout cela à partir des fonctions clés citées... commence à voir OPEN dans l'aide de VB, je pense... puis sur ce site, tu trouveras surement des complèments...

Amicalement,
Us.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
10 juil. 2006 à 07:27
 Bonjour,

Ci-dessous, en vbs, la comparaison ligne par ligne entre 2 fichiers .txt
Il y a peut-être + simple ????

Option Explicit
Dim Fso, Path, Fic1, Fic2
Dim i, r, imax1, imax2
Dim ObjTextStream, strtmp1, strtmp2 Const ForReading 1, ForWriting 2, ForAppending=8



Path   = "d:"
Fic1  = "IP_1.txt"
Fic2  = "IP_2.txt"imax1 0 : imax2 0



Set fso = CreateObject("Scripting.FileSystemObject")
Set ObjTextStream = Fso.OpenTextFile(Path & Fic1, 1)
Do While Not ObjTextStream.AtEndOfStream
   strtmp1 = split(ObjTextStream.ReadLine, vbLf)
   For i = 0 to Ubound(strtmp1)
       imax1 = imax1 + 1
       ReDim Preserve Tableau1(1, imax1)
       Tableau1(1, imax1) = strtmp1(i)
   Next
Loop
ObjTextStream.Close



Set ObjTextStream = Fso.OpenTextFile(Path & Fic2, 1)
Do While Not ObjTextStream.AtEndOfStream
   strtmp2 = split(ObjTextStream.ReadLine, vbLf)
   For i = 0 to Ubound(strtmp2)
       imax2 = imax2 + 1
       ReDim Preserve Tableau2(1, imax2)
       Tableau2(1, imax2) = strtmp2(i)
   Next
Loop
ObjTextStream.Close



For r = 1 To imax1
    If Tableau1(1, r) <> Tableau2(1, r) Then
        MsgBox "La ligne " & r & " est différente entre les 2 fichiers" &vbCrLf&vbCrLf&_
               "1er  tableau " & vbCrLf& Tableau1(1, r) &vbCrLf&vbCrLf&_
               "2ème tableau " & vbCrLf& Tableau2(1, r)
    End If
Next
Set Fso = Nothing
Set ObjTextStream = Nothing


jean-marc
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 juil. 2006 à 08:03
pas très joli, le
ReDim Preserve Tableau1(1, imax1)


dans une boucle....


de plus, tu fais un ReadLine, tu as donc surement aucun Split a faire après cela...

un ReadAll aurait surement plus sa place...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009
10 juil. 2006 à 09:23
Bonjour,


Finalement, je n'ai pas à comparer 2 fichiers, mais des valeurs avec d'autres valeurs celle-là contenues dans un fichier TEXTE.


Auriez-vous un exemple de script qui effectue une recherche d'une chaine de caractères dans un fichier ?


Mon fichier TEXTE se présente sous la forme suivante :


 


Le contexte de multi-etendue en cours a change pour la multi-etendue 10.56.0.0.


=============================================================
  Adresse reservation -    ID unique                          
=============================================================


    10.56.30.6        -    00-06-1b-d1-69-4e-
    10.56.30.0        -    00-02-e3-52-f8-45-
    10.56.30.1        -    00-14-38-0a-f7-e6-




De plus, je dois "isoler" dans ce fichier chaque adresse IP. Pourriez-vous me dire comment faire ?


La 1ere adresse IP est située sur la 8eme ligne de mon fichier
Chaque adresse IP est en début de ligne, précédée de 5 espaces, et suivie de plusieurs espaces.


Merci d'avance
Cordialement
Parker
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 juil. 2006 à 10:03
j'utiliserait les expressions regulières, pour extraire les IP ...

par exemple :

((?:\d+\.){3}\d+)\s+-\s+((?:..-){6})

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009
10 juil. 2006 à 11:57
Je dois tester si l'adresse IP est présente dans le fichier TEXTE.

SI l'adresse IP est déjà présente dans le fichier TEXTE, ALORS je teste l'adresse IP suivante.

SI l'adresse IP n'est pas présente dans le fichier TEXTE, ALORS je peux réserver cette adresse IP (en utilisant NETSH...)

Lors de l'execution de mon script, il y a une erreur à la ligne DO UNTIL.

Mais il y a surtout je pense une erreur de LOGIQUE dans mon script :

Option Explicit
' ----- var and const

Dim IPCentre, IP
Dim x, y
Dim FSO,Ftxt
Dim Compteur, Chaine
Dim fichier_lecture

IPCentre = "10.56"
Compteur = 0
fichier_lecture = "result_show_reservedip.txt"

' ----- global obj instanciation

Set FSO = CreateObject("Scripting.FileSystemObject")

' ----- main prog

' Permet de générer les adresses IP possibles de 30.2 à 49.254
' (on ne distribue pas les adresses qui se terminent par 0, 1 et 255)

Set Ftxt = FSO.OpenTextFile(fichier_lecture, 1, true)

For x = 30 To 31
      
        For y = 2 To 20

' Affichage de l'adresse IP complète 10.56.x.y
' (de 10.56.30.2 à 10.56.49.254)
' wscript.echo IPCentre &amp; "." &amp; x &amp; "." &amp; y

IP = IPCentre &amp; "." &amp; x &amp; "." &amp; y

wscript.echo IP

' on parcourt chaque ligne du fichier texte

Do Until Ftxt.AtEndOfStream = true

      Chaine = Ftxt.Readline()
      
      If InStr(1, Chaine, IP) > 0 Then
       Compteur = Compteur +1
      End if

Loop
           
Ftxt.Close
Set Ftxt = nothing
Set FSO = nothing          

 Next
Next

wscript.echo "IP trouvée" &amp; Compteur &amp; " fois"
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
10 juil. 2006 à 12:50
 Bonjour,

Bonjour Renfield,
Tu me conseilles de
Set File = Fso.OpenTextFile("d:\IP_1.txt", ForReading)



Resultat = File.ReadAll
Puis de mettre Resultat dans un tableau ????

Pour  parker13,
je regarde ce soir,
1) inputbox avec x.y
2) lecture du fichier pour savoir si y.x existe
3) si x.y n'existe pas, ajout d'une ligne contenant y.x + msgbox
Ai-je bien compris la question ????
Ca doit pas être bien sorcier à solutionner.

jean-marc
0
PARKER13 Messages postés 33 Date d'inscription vendredi 18 octobre 2002 Statut Membre Dernière intervention 31 mars 2009
10 juil. 2006 à 13:08
Jean-Marc,

Je dois faire une "appli" (ou un script) qui soit capable d'effectuer une réservation d'adresse IP dans le DHCP (Microsoft Windows 2003 Server).

La ligne de commande ci-dessous permet de réserver une adresse IP :

NETSH DHCP SERVER \\SERVEUR SCOPE ww.xx.yy.zz ADD RESERVEDIP AdresseIP AdresseMAC NomReservation Description

Le problème, c'est que je ne veux pas préciser moi-même l'AdresseIP à réserver.
Mais je souhaite que mon "appli" (ou mon script) détecte automatiquement la 1ère adresse IP disponible (non encore réservée).

Voici le résultat de la commande "NETSH dhcp server scope Etendue show reservedip" qui permet de lister l'ensemble des adresses IP déjà réservées :
Le contexte de multi-etendue en cours a change pour la multi-etendue 10.56.0.0.  Adresse reservation -    ID unique                          

    10.56.30.6        -    00-06-1b-d1-69-4e-
    10.56.30.0        -    00-02-e3-52-f8-45-
    10.56.30.1        -    00-14-38-0a-f7-e6-
    10.56.30.3        -    00-0d-9d-d0-12-03-

Je redirige le résultat de cette commande dans le fichier "result_show_reservedip.txt".

A l'aide d'une boucle, je vais tester tout d'abord si la premiere Adresse IP de mon étendue est déjà réservée dans le DHCP.

SI l'adresse IP est déjà présente dans le fichier TEXTE, ALORS je teste l'adresse IP suivante.

SI l'adresse IP n'est pas présente dans le fichier TEXTE, ALORS je peux réserver cette adresse IP (en utilisant NETSH DHCP SERVER \\SERVEUR SCOPE ww.xx.yy.zz ADD RESERVEDIP AdresseIP AdresseMAC NomReservation Description)

Actuellement, lors de l'execution de mon script (voir ci-dessus), il y a une erreur à la ligne DO UNTIL.

Mais je pense qu'il y a surtout une erreur de LOGIQUE dans mon script.

Merci de ton aide
0
Rejoignez-nous