Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : VBS Chercher et remplacer une ligne par une autre dans un fichier texte [ Langages dérivés / VBScript ] (toulouz1)

lundi 18 août 2008 à 14:32:57 | VBS Chercher et remplacer une ligne par une autre dans un fichier texte

toulouz1

Bonjour,

Je suis relativement débutant en VBS, galère sur un pb que je supposais simple et tranquille au départ, en VBS :

J'ai un fichier texte avec une ligne quelque part ( ? cela varie ) qui commence par 1C... et dont la suite de la ligne peut varier
Je cherche à détecter la chaine 1C ( en début de ligne ), puis remplacer cette ligne par une autre ligne que j'aurais défini avant dans le script.

- J'ai essayé simple ; un script court avec "replace", la ligne n'est pas remplacée, en fait : la suite après "1C" est poussée vers la droite après la chaine de remplacement.

- Puis avec regex ; même pb

Je n'arrive pas à trouver comment inclure sélectionner ce qu'il y a après, et l'effacer ou remplacer

- Puis avec un do while, avec un fichier temporaire, avec strcomp, puis instr et c'est long et compliqué et je m'y perd un peu car y'a bug : la ligne à ajouter se retrouve en première ligne.

J'ai pas de solution, auriez-vous un script modèle ou une doc en ligne de référence bien faire et détaillée, avec modèles ( hors script center ) ?

Merci d'avancer pour toute info,

lundi 18 août 2008 à 14:43:20 | Re : VBS Chercher et remplacer une ligne par une autre dans un fichier texte

PCPT

Administrateur CodeS-SourceS
salut,

tu trouveras une exemple VB6 ici :
http://www.codyx.org/snippet_remplacer-chaine-autre-dans-fichier_187.aspx

puisque tu as déjà fait le code VBS, je ne pense pas que tu aies beaucoup d'adaptations à faire
++

Prenez un instant pour répondre à ce sondage svp  

lundi 18 août 2008 à 21:38:15 | Re : VBS Chercher et remplacer une ligne par une autre dans un fichier texte

JMO

Membre Club
Bonsoir,

Exemple avec dictionnaire et tableau.

Fichier .txt en entrée
22Addddddddd
21Baaaaaaaaa
1Cbbbbbbbbbb
2Axxxxxxxxxxxx
2Dzzzzzzzzzzz
2Esssss

Fichier .txt en sortie
22Addddddddd
21Baaaaaaaaa
2Dzzzzzzzzzzz
2Axxxxxxxxxxxx
2Esssss


Option Explicit
Const sFile = "F:\SCRIPTS\Fichiers\test_toulouz1.txt"
Const sVar1 = "1C"
Const sVar2 = "zzz"
Dim objFso, objFile
Dim objDico
Dim arrDicoKeys, arrDicoItems
Dim cptLineDico, cptLineVar1, cptLineVar2, i, j
Dim strResult

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile(sFile,1)
Set objDico = CreateObject("Scripting.Dictionary")

cptLineVar1 = 0
cptLineVar2 = 0

Do Until objFile.AtEndOfStream
   objDico.Add cptLineDico, objFile.ReadLine : cptLineDico = cptLineDico +1
Loop
objFile.Close

arrDicoKeys  = objDico.Keys
arrDicoItems = objDico.Items

For i = 0 To objDico.Count -1
    If Left(arrDicoItems(i),2) = sVar1 Then cptLineVar1 = i
    If InStr(arrDicoItems(i),sVar2) <> 0 Then cptLineVar2 = i
    
    If cptLineVar1 <> 0 And cptLineVar2 <> 0 Then
'       MsgBox arrDicoItems(cptLineVar1) &vbCrLf& arrDicoKeys(cptLineVar1) &vbCrLf& _
'              arrDicoItems(cptLineVar2) &vbCrLf& arrDicoKeys(cptLineVar2)
       strResult = True
       Exit For
    End if
Next
  
If strResult = True Then
   objDico(cptLineVar1) = objDico.Item(cptLineVar2)
   Set objFile = objFso.CreateTextFile(sFile,True)
   For j = 0 To objDico.Count -1
       If arrDicoKeys(j) <> cptLineVar2 Then objFile.WriteLine objDico.Item(j) &vbCr
       'objFile.WriteLine objDico.Item(j) &vbcr
   Next
   objFile.Close
   Set objFile = Nothing
End If

Set objFso = Nothing
Set objDico = Nothing



jean-marc

mardi 19 août 2008 à 08:43:19 | Re : VBS Chercher et remplacer une ligne par une autre dans un fichier texte

toulouz1

Salut,

Merci pour les exemples, et dire que j'avais envisagé de le faire en batch au début et supposé très court !

je suis en cours d'étude de l'exemple en VB qui contient la structure de départ que j'avais

et pour le deuxième, en VBS, plus compliqué, il contient des trucs qui m'intéresse ( par contre il ne fonctionne pas ; il n'atteint a priori pas le fichier. ) Et je ne sais pas si c'est la bonne méthode car c'est un script qui doit être modifié et les lignes doivent rester dans l'ordre ; elles ne sont pas classées en tableau.

Est ce qu'il est possible de suivre le déroulement d'un script ? Avec une sorte de debugger qui affiche le contenu des variables, pas à pas ?


mardi 19 août 2008 à 11:34:49 | Re : VBS Chercher et remplacer une ligne par une autre dans un fichier texte

toulouz1

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




Cette discussion est classé dans : fichier, script, vbs, ligne, remplacer


Répondre à ce message

Sujets en rapport avec ce message

VBS et excel [ par pcastain ] Bonjour,je voudrais, avec un fichier vbs, chercher un mot dans un tableau excel,et que le vbs me dise dans une msgbox : le mot "toto" ce trouve ligne [VBS] Script pour récupérer l'adresse complète d'un fichier [ par Amanck ] Bonjour,Je débute en VB et je dois écrire un script VBS pour compléter un programme de pilotage d'automate. Je vais essayer d'être le plus clair possi Script VBS uniquement pour télécharger un fichier [ par jeffrey17 ] Bonjour j'espère que quelqu'un pourra m'aider à résoudre ce petit problème.En effet, j'aimerais avoir/savoir quelle code mettre dans une ficher .vbs p Remplacer la premier ligne d'un fichier TXT [ par thonyboy ] Bonjour,Bon tout est dans le sujet.J'ai un fichier texte dont la premiere ligne est la chaine suivante "Par toto le 12 janvier 2007"Je voudrais savoir Gestion mesage d'erreur [ par tteuteu ] Bonjour !Je vous expose mon problème. Je souhaite exécuter un script à partir d'un html. J'ai donc utilisé :script <font color="#7f007f" size="2 Sauvegarder efficacement des modifications à un document texte [ par Aaliibaba ] Bonjour,   <p class="MsoNormal" style="MARGIN: 0cm VBS : Rechercher une valeur dans un tableau excel [ par sboulic ] Bonjour,Novice en VBScript (en prog tout court), je dois modifier un script de logon windows (.vbs) pour aller chercher une veleur dans un fichier.J'a Remplacer un caractere par un autre dans un fichier. [ par jff27 ] bonjour à tous.Le but de ma question est de remplacer un caractere de fin de ligne UNIX par un caractere de fin de ligne Windows.D'anvance Merci.Jean- Remplacer une ligne spécifique dans un fichier de configuration Apache ( httpd.conf ) [ par motherboy ] Salut,Je souhaiterai de l'aide car je n'y connait franchement rien en instruction.Je voudrai remplacer la ligne :ServerName 80.11.57.247 du fichier ht Script pour trouver et copier une parti de fichier TXT [ par bernac ] Salut a tous,je cherche a ouvrir un fichier texte trouver la ligne qui m'interesse et copier de cette ligne jusqu'a la fin du fichier dans un autre fi


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.