Voilà le script sur lequel je travaillais et que j'ai commenté ; la base est un script avec un strcomp ( comparaison de chaines ) qui fonctionnait très bien, j'ai remplacé strcomp par instr ( et les conditions <> ), mais il écrit la ligne remplaçante au début, et même si la ligne qui doit être trouvée n'y est pas.
Y'a pt'êt un pb de définition chaine / ligne mais je ne sais pas où faire le changement car il semble que la syntaxe soit la même ?
Const Fichier = "c:\test.bat"
Const LigneCherche = "1C"
Const Ligne_remplacant = "1C nouvelle ligne "
'On error resume next
Dim f1, f2, Test_ligne, Fso
Dim ligne, ligne2, Retour
Set fso = wscript.CreateObject("scripting.filesystemobject")
'opérations dans un fichier temporaire
fso.CopyFile fichier, Mid(fichier, 1, Len(fichier) - 3) & "tmp", True '(Mid(chaine, numero lettredebut, taille) Mid ("bonjour", 2, 3) = "njo"
Set f = Fso.opentextfile(Mid(fichier, 1, Len(fichier) - 3) & "tmp", 1) 'len : Renvoie le nbr de caractères d'1 chaîne de caract ou le nbr d'octets nécessaires pour stocker une variable
Set f2 = Fso.opentextfile(fichier, 2)
Test_ligne = 1
Retour = False
'boucle de condition de présence de la chaine : LigneCherche dans : ligne
Do while ((Test_Ligne <> 0) and (f.AtEndOfStream <> True)) 'Retourne un booléen (True ou False) indiquant si la fin de fichier est atteinte'
ligne = f.readline
Test_ligne = InStr(ligne, LigneCherche) 'inStr cherche une chaine incluse dans var:ligne
If (test_ligne) <> 0 Then 'si la condition est différente de 0, réécrit l'ancienne ligne
f2.writeline Ligne
Else
f2.Writeline Ligne_remplacant 'si la condition est vraie applique nouvelle ligne
Retour = True
' NOTE : LA LIGNE CI DESSUS EST ECRITE : vérifié : OK
End if
loop
'On réécrit le reste du fichier
Do While (f.AtEndOfStream = False)
Ligne = f.readline
f2.writeline ligne
Loop
f2.close
f.close
fso.deletefile(Mid(fichier, 1, Len(fichier) - 3) & "tmp")
If (Retour = True) Then
wscript.quit(0)
Else
wscript.quit(1)
End if