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

VBScript Discussion :

Remplacement d'IP dans un fichier.


Sujet :

VBScript

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Par défaut Remplacement d'IP dans un fichier.
    Bonjour,

    J'ai petits soucis.
    J'ai fichier de conf cisco avec dedans des IP (c'est un fichier texte avec plusieurs ligne dont certaine contiennent de IP)
    Je désire faire un script qui va modifier toutes les IP de ce fichier en se basant sur un fichier CSV qui contient les nouvelles IP.
    Jusqu’à là rien de bien compliqué

    Mais le soucis est lorsque par exemple je recherche l'IP 172.10.10.1 et la remplacé par 10.10.20.3 il va bien me remplacer l'IP mais il va également remplacé toutes les IP qui commence pareil, par exemple 172.10.10.112 et la c'est le problème car il ne doit pas la changé.

    Voici mon code fait jusqu’à là.
    L'option explicite et la déclaration des variables sont en commentaire par volonté, cela me permet d'être plus souple pour tester mon 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    'Option Explicit
    'variable declaration
    'Dim strByteMatch, strIpMatch, strPattern, CSVfile, LOGfile, FolderCFG, objFSO, RegExMatch, strLog, objTextFile, File, arrStr, strNAME, strIP, arrIP, strREPLACEMENT, objCFGFile, strCFGcontent, intOCT1, intOCT2, intOCT3, intOCT4
     
    'Pattern for IP check
    strByteMatch = "(25[0-5]|2[0-4]\d|[01]?\d\d?)"
    strIpMatch = strByteMatch & "\." & strByteMatch & "\." & strByteMatch & _
    "\.(" & strByteMatch & "|(" & strByteMatch & "-" & strByteMatch & "))"
    strPattern = "^" & strIpMatch & "(," & strIpMatch & ")*$"
     
    'Set File variable
    CSVfile = "..\Replacement_IP.csv"
    LOGfile = "..\LOG\Replacement_IP.log"
    FolderCFG = "..\ConfigFiles\"
     
    'set FSO object
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    'Does file exist?
    If objFSO.FileExists(CSVfile)=false then
    	Log("Error : File " & CSVfile & " not found!")
    	wscript.echo "Error : File " & CSVfile & " not found!"
    	wscript.Quit 1
    end If
     
    'Open CSV file, read mod.
    Set objTextFile = objFSO.OpenTextFile(CSVfile, 1)
    Do while not (objTextFile.AtEndOfStream)
    'search loop filename to edit
    	For Each File in objFSO.GetFolder(FolderCFG).Files
    		If Right(LCase(File.Name), 3)  = LCase("cfg") And InStr(LCase(File.Name),LCase("XXX")) <> 0 Then
    				'split CSV data's in array
    				arrStr = Split(objTextFile.ReadLine, ";")
     
    				'Check CSV IP replacement
    				If Not RegExIsMatch(arrStr(1), strPattern) Then
    					Log("Error : IP invalid in " & CSVfile & ", row : " & objTextFile.Line & ", col : 2")
    					WScript.Echo "Error : IP invalid in " & CSVfile & ", row : " & objTextFile.Line & ", col : 2"
    					wscript.Quit 1
    				End If
    				If Not RegExIsMatch(arrStr(2), strPattern) Then
    					Log("Error : IP invalid in " & CSVfile & ", row : " & objTextFile.Line & " col : 3")
    					WScript.Echo "Error : IP invalid in " & CSVfile & ", row : " & objTextFile.Line & " col : 3"
    					wscript.Quit 1
    				End If
     
    				'Name IP to replace
    				strNAME = arrStr(0)
    				'IP to replace
    				strIP = arrStr(1)
     
    				'IP replacement
    				strREPLACEMENT = arrStr(2)
     
    				'Open CFG file, read mod
    				Set objCFGFile = objFSO.OpenTextFile(FolderCFG & File.Name, 1)
    				'Get content of CFG file
     
    				strCFGcontent = objCFGFile.ReadALL
    				'close CFG file
    				objCFGFile.close
     
    				LOG("Replace " & strNAME & " in " & File.Name & " : " & strIP & " by " & strREPLACEMENT)
    				strCFGcontent = Replace(strCFGcontent, strIP, strREPLACEMENT)
    				Set objCFGFile = objFSO.OpenTextFile(FolderCFG & File.Name, 2)
    				objCFGFile.WriteLine strCFGcontent
    				objCFGFile.close
    		End if
    	Next
    Loop
     
    objTextFile.close
    Log("Replacement IP it's done.")
    Log("-------------------------")
    wscript.Quit 0
     
    ' -------- FUNCTION SECTION --------
     
    'Function check IP
    Function RegExIsMatch(strString,strPattern)
        Dim RegEx
        RegExMatch=False
     
        Set RegEx = New RegExp                
        RegEx.IgnoreCase = True                
        RegEx.Global=True                   
        RegEx.Pattern=strPattern
     
        If RegEx.Test(strString) Then RegExIsMatch=True
    End Function
     
    'function LOG
    Function LOG (strLog)
    	Dim objLogFile
    	'Open LOG file, write append mod.
    	Set objLogFile = objFSO.OpenTextFile(LOGfile, 8, true)
    	objLogFile.WriteLine Date & " - " & Time & " " & strLog
    'debug	wscript.echo strLog
    	objLogFile.close
    End Function
    D'avance merci pour l'aide que vous pourriez me fournir pour trouvé une solution.

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 985
    Par défaut
    Il suffit d'ajouter un word boundary pour lever l'ambiguïté, quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set regEx = New RegExp
    regEx.Pattern = "\b" & strIP & "\b"
     
    strCFGcontent = regEx.Replace(strCFGcontent, strREPLACEMENT)

    Une petite remarque à propos de la sous-pattern strByteMatch: celle-ci peut être améliorée en utilisant à la place une pattern un peu plus longue mais plus efficace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strByteMatch = "(?:[01]\d{0,2}|[3-9]\d?|2(?:[0-4]\d?|5[0-5]?|[6-9]?))"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme de remplacement de texte dans des fichiers
    Par Invité4 dans le forum Linux
    Réponses: 13
    Dernier message: 12/11/2006, 16h06
  2. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37
  3. [langage] Remplacer du texte dans un fichier
    Par Michaël dans le forum Langage
    Réponses: 9
    Dernier message: 11/03/2005, 15h19
  4. Réponses: 5
    Dernier message: 25/01/2005, 14h26
  5. remplacer un caractere dans un fichier
    Par ickis dans le forum C
    Réponses: 11
    Dernier message: 13/10/2003, 09h29

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