OVH Cloud OVH Cloud

problème de remplacement de mots dans un fichier

6 réponses
Avatar
moratella
Bonjour,
J'aurais besoin d'ouvrir un fichier .ini, de rechercher et de remplacer une
chaine de caractère dedans.
Je vous donne le bout du fichier .ini concerné:


[PRINTER_DRIVER]
PrinterName=HP2280
DriverName=HP Business Inkjet 2280 PCL 5C
DriverFileName=HPSF031G.dll
PortName=LPT1:
DriverSharePath=\\Vzi351\HP2280
[SET_DEFAULT]
DefaultType=2
DefaultPrinterName=HP2280
[SUPPORT]
DebugOn=False


J'aurais besoin de remplacer le terme LPT1: par IP_XXX.XXX.XXX.XXX
Sachant que X est un numérque et que la chaine est une variable:
adresse_ip="IP_133.22.23.24

Pour le script, je partais sur une ouverture:

adresse_ip="IP_133.22.23.24
set fso=CreateObject("Scripting.FileSystemObject")
'il faut que je refasse pointer en début de fichier
if fso.fileExists(c:\imprimante.txt) then
Compt = 0
Set Fichier = fso.OpenTextFile(c:\imprimante.txt, 8, False)
Do While Fichier.AtEndOfStream <> True
if inStr(1,Fichier,"LPT1:")>0 then
Replace(fichier,"LPT1:",adresse_ip)

Quand pensez vous? et pouvez vous m'aider à arriver au bon résultat?
En tout cas merci d'avance et bon WE
Raphaël

6 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news: ,
moratella s'est ainsi exprimé:

Bonjour,
J'aurais besoin d'ouvrir un fichier .ini, de rechercher et de
remplacer une chaine de caractère dedans.
[..]
J'ai écrit un script VBS qui effectue des remplacements de chaine dans un

fichier :
REPLACE.VBS
http://www.bellamyjc.org/fr/vbsdownload.html#replace


Script de remplacement d'une chaine de caractères
dans un ensemble de fichiers texte
JC BELLAMY © 2002
------------------------------------------
Syntaxe :
replace -a<ancienne> -n<nouvelle> -f<fichier> [-b<backup>] [-s]
replace /a<ancienne> /n<nouvelle> /f<fichier> [/b<backup>] [/s]
Paramètres obligatoires :
<ancienne> : chaine à remplacer
<nouvelle> : nouvelle chaine
<fichier> : nom du fichier, avec ou sans chemin
peut comporter les caractères génériques * et ?
On peut remplacer un caractère dans les chaines par sa valeur
hexadécimale sous la forme xnn
Par exemple le guillemet " : x22
Paramètres facultatifs :
<backup>: : extension des fichiers de sauvegarde (par défaut ".bak")
(le "." initial est facultatif)
si ce commutateur est omis, il n'y a pas de backup
-c : remplacements sensibles à la casse
dans ce cas, on distingue majuscules et minuscules
-s : exploration des sous-dossiers requise
-r : les chaines sont interprétées comme expressions régulières
NB : les chaines et nom de fichier sont à encadrer par des guillemets
s'ils comportent des espaces

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*

Avatar
Quoi ma gueulle(R) ?
On Fri, 27 May 2005 09:34:02 -0700, moratella
wrote:

J'aurais besoin de remplacer le terme LPT1: par IP_XXX.XXX.XXX.XXX
Sachant que X est un numérque et que la chaine est une variable:
adresse_ip="IP_133.22.23.24


C'est juste un probleme de transtypage ? y a pas un truc du genre
Int2char ? Il doit y avoir des fonctions toutes pretes, sinon un
comparatif dans une boucle de 0 a 9 pour trouver le int et une fois
trouvé le remplacer par un char.
Et encore je suis pas sur car X ne doit pas etre numerique car il fait
partie d'une chaine XXX.XXX.XXX.XXX

Avatar
Jean-Claude BELLAMY
Dans le message news: ,
moratella s'est ainsi exprimé:

Bonjour,
J'aurais besoin d'ouvrir un fichier .ini, de rechercher et de
remplacer une chaine de caractère dedans.
Je vous donne le bout du fichier .ini concerné:


[PRINTER_DRIVER]
PrinterName=HP2280
DriverName=HP Business Inkjet 2280 PCL 5C
DriverFileName=HPSF031G.dll
PortName=LPT1:
DriverSharePath=Vzi351HP2280
[SET_DEFAULT]
DefaultType=2
DefaultPrinterName=HP2280
[SUPPORT]
DebugOnúlse


J'aurais besoin de remplacer le terme LPT1: par IP_XXX.XXX.XXX.XXX
Sachant que X est un numérque et que la chaine est une variable:
adresse_ip="IP_133.22.23.24

Pour le script, je partais sur une ouverture:

adresse_ip="IP_133.22.23.24
set fso=CreateObject("Scripting.FileSystemObject")
'il faut que je refasse pointer en début de fichier
if fso.fileExists(c:imprimante.txt) then
Compt = 0
Set Fichier = fso.OpenTextFile(c:imprimante.txt, 8, False)
Do While Fichier.AtEndOfStream <> True
if inStr(1,Fichier,"LPT1:")>0 then
Replace(fichier,"LPT1:",adresse_ip)

Quand pensez vous?


Toujours !
Même quand je dors ... ;-)

....
N'aurais-tu pas plutôt voulu dire "Qu'en pensez vous ?" ;-)


Pour en revenir à ton script, il y a un paquet d'erreurs !

Set Fichier = fso.OpenTextFile(c:imprimante.txt, 8, False)
Arrrghhh !
Et les guillemets ?
-> Set Fichier = fso.OpenTextFile("c:imprimante.txt", 8, False)

Re-arrrghhh !
Ton fichier, tu veux l'ouvrir en lecture, n'est-ce pas ?
Alors pourquoi tu le mets en "Append" ? (écriture à la fin)
Il faut qu'il soit ouvert en lecture !
-> Set Fichier = fso.OpenTextFile("c:imprimante.txt", 1, False)

Do While Fichier.AtEndOfStream <> True
if inStr(1,Fichier,"LPT1:")>0 then
Replace(fichier,"LPT1:",adresse_ip)

Re-Arrrrgggggghhhhhhhhhh !!!

Quand tu écris
Set Fichier = fso.OpenTextFile

"Fichier" est un objet de type TextStream, et en aucune façon une chaine de
caractères !

Donc pour accéder à chaque ligne du fichier, il faut utiliser la méthode
"readline" :
Do While Fichier.AtEndOfStream <> True
ligne=Fichier.Readline
if inStr(1,ligne,"LPT1:")>0 then
Replace(ligne,"LPT1:",adresse_ip)
...
et il faudra alors écrire cette ligne dans un AUTRE fichier (à ouvrir en
écriture)
Fichier2.WriteLine ligne


Je t'ai indiqué dans un précédent message mon script REPLACE.VBS
Tu peux t'en inspirer ..

Si le fichier n'est pas trop gros, tu peux aussi passer par un chargement
complet en mémoire :

Set Fichier = fso.OpenTextFile("c:imprimante.txt", 1, False)
Contenu=Fichier.ReadAll
Fichier.close
Replace(Contenu,"LPT1:",adresse_ip)
Set Fichier = fso.OpenTextFile("c:imprimante.txt", 2, False)
Fichier.write Contenu
Fichier.close


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*

Avatar
Fred
Dans son message
moratella nous dit :

Bonjour,
J'aurais besoin d'ouvrir un fichier .ini, de rechercher et de
remplacer une chaine de caractère dedans.
Je vous donne le bout du fichier .ini concerné:


[PRINTER_DRIVER]
PrinterName=HP2280
DriverName=HP Business Inkjet 2280 PCL 5C
DriverFileName=HPSF031G.dll
PortName=LPT1:
DriverSharePath=Vzi351HP2280
[SET_DEFAULT]
DefaultType=2
DefaultPrinterName=HP2280
[SUPPORT]
DebugOnúlse


J'aurais besoin de remplacer le terme LPT1: par IP_XXX.XXX.XXX.XXX
Sachant que X est un numérque et que la chaine est une variable:
adresse_ip="IP_133.22.23.24

Pour le script, je partais sur une ouverture:

adresse_ip="IP_133.22.23.24
set fso=CreateObject("Scripting.FileSystemObject")
'il faut que je refasse pointer en début de fichier
if fso.fileExists(c:imprimante.txt) then
Compt = 0
Set Fichier = fso.OpenTextFile(c:imprimante.txt, 8, False)
Do While Fichier.AtEndOfStream <> True
if inStr(1,Fichier,"LPT1:")>0 then
Replace(fichier,"LPT1:",adresse_ip)

Quand pensez vous? et pouvez vous m'aider à arriver au bon résultat?
En tout cas merci d'avance et bon WE
Raphaël


Bonsoir !
Ca avance !
Bon, tu as eu un corrigé en bonnet diforme par JCB alors je passe mon chemin
;-)

--
Fred

Avatar
DJ
moratella wrote:
Bonjour,
J'aurais besoin d'ouvrir un fichier .ini, de rechercher et de
remplacer une chaine de caractère dedans.
Je vous donne le bout du fichier .ini concerné:


salut ,
en complement voila une fonction perso pour .ini qui marche bien d'apres me
tests.
( Oui je crois que j'ai reinventé la roue,il me semble avoir vu recement
qu'une API ......)
DJ

Function SetParamIni(ByVal FullPathFicIni, ByVal SectionNom, ByVal CleNom,
ByVal CleVal)
Rem
***************************************************************************
Rem * Objet : modifie un parametre dans un Fichier .ini standart
*
Rem *
*
Rem * Entrées: Chemin complet du fichier ini a modifier
*
Rem * Nom de la section dans la quelle se trouve la clé sans
crochet *
Rem * Nom de la cle a trouver
*
Rem * Nouvelle Valeur a affecter a la cle
*
Rem *
*
Rem * Retours: resultat de l operation
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, FicNew, NomFicNew, Enr, Rep, blnCleOK, blnSectOK
Dim strDebug

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ------------------------------------------(verifie l existance du
fichier ini a modifier
If MyFSO.fileexists(FullPathFicIni) Then
Rem---------------------------------------( recup du Nom complet d
origine sauf le .ini pour faire le .New
NomFicNew = Left(FullPathFicIni, Len(FullPathFicIni) - 4) & ".new"
Rem --------------------------------------( ouverture des fichiers
.ini et .new
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Set FicNew = MyFSO.createtextfile(NomFicNew, True)
strDebug = "ERREUR Section: " + SectionNom + " NON Trouvé !!! " '
reponse par defaut
blnCleOK = False
blnSectOK = False

Rem---------------------------------------( Pour chaque ligne du
fichier d origine
Do
Enr = FicIni.readline
'-------------------------------------( test si cest une Section
et si c est la bonne
If Left(Enr, 1) = "[" Then
If Mid(Enr, 2, Len(Enr) - 2) = SectionNom Then
strDebug = "Section Trouvé: " + SectionNom + " "
blnSectOK = True
Else
blnSectOK = False
End If
Else
Rem ------------------------------( c est une ligne de
parametre
If blnSectOK Then ' on est dans la bonne section
If Left(Enr, Len(CleNom)) = CleNom Then
' cest la cle recherché dans la section voulue
blnCleOK = True
strDebug = strDebug + vbCr + "Clé trouvée: " +
CleNom
Enr = CleNom & "=" & CleVal
Rep = "Modif OK pour " + CleNom
End If
End If
End If
FicNew.writeline (Enr)
Loop Until FicIni.atendofstream = True
FicIni.Close
Rem --------------------------------------(Fin du fichier ini si pas
trouvé a joute la clé en fin de fichier
If Not blnCleOK Then
Enr = "[" + SectionNom + "]"
FicNew.writeline (Enr)
Enr = CleNom & "=" & CleVal
FicNew.writeline (Enr)
Rep = "Modif OK pour " + CleNom
End If

FicNew.Close
Rem --------------------------------------( verifie si nouveau
fichier existe avant kill du .ini !
If MyFSO.fileexists(NomFicNew) Then
MyFSO.deletefile (FullPathFicIni)
Set FicNew = MyFSO.getfile(NomFicNew)
FicNew.Name = MyFSO.GetFileName(FullPathFicIni)
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"
End If

SetParamIni = Rep
End Function

Avatar
moratella
Bonjour messieurs,
Je m'excuse de ne vous avoir répondu avant mais j'ai été quelque peu malade
ces derniers temps et je viens juste de reprendre le boulot...
Je vous remercie pour votre aide.
Je viens de finir mon projet et part pour de nouvelles aventures
Je vous souhaite à tous une bonne continuation et peut être à bientot sur
ces newsgroups

Raphaël


Bonjour,
J'aurais besoin d'ouvrir un fichier .ini, de rechercher et de remplacer une
chaine de caractère dedans.
Je vous donne le bout du fichier .ini concerné:


[PRINTER_DRIVER]
PrinterName=HP2280
DriverName=HP Business Inkjet 2280 PCL 5C
DriverFileName=HPSF031G.dll
PortName=LPT1:
DriverSharePath=Vzi351HP2280
[SET_DEFAULT]
DefaultType=2
DefaultPrinterName=HP2280
[SUPPORT]
DebugOnúlse


J'aurais besoin de remplacer le terme LPT1: par IP_XXX.XXX.XXX.XXX
Sachant que X est un numérque et que la chaine est une variable:
adresse_ip="IP_133.22.23.24

Pour le script, je partais sur une ouverture:

adresse_ip="IP_133.22.23.24
set fso=CreateObject("Scripting.FileSystemObject")
'il faut que je refasse pointer en début de fichier
if fso.fileExists(c:imprimante.txt) then
Compt = 0
Set Fichier = fso.OpenTextFile(c:imprimante.txt, 8, False)
Do While Fichier.AtEndOfStream <> True
if inStr(1,Fichier,"LPT1:")>0 then
Replace(fichier,"LPT1:",adresse_ip)

Quand pensez vous? et pouvez vous m'aider à arriver au bon résultat?
En tout cas merci d'avance et bon WE
Raphaël