Simple remplacement de chaine... [vbs] [SOLVED!!] - VB/VBA/VBS - Programmation
Marsh Posté le 29-03-2007 à 17:24:25
Voila ce que je ferais (mais je ne comprends pas le coup su split sur "'" et le filtre sur usern...) en admettant qu'au final, tu veux simplement virer bobo de ton fichier texte :
strText = objFile.ReadAll
tbl= split(strText,"bobo'" ) 'On isole l'élément à soustraire
objFile.Close
Set objFile = filesys.OpenTextFile("C:\Documents and Settings\pn\Mes documents\kiosk\config.ini", 2)
objFile.Write tbl(0) & tbl(1)
'tbl(0)=tout ce qu'il y avait avant bobo (bobo exclu)
'tbl(1)=tout ce qu'il y avait après bobo (bobo exclu)
'Ajouter éventuellement un vbnewline entre tbl(0) et tbl(1)
objFile.Close
Marsh Posté le 29-03-2007 à 17:28:02
Merci pour ta réponse, j'étais en train d'éditer le message...
Alors bobo n'est pas tjrs bobo... mais un nom qui varie tout le temps en fonction d'une session utilisée...
En fait j'ai rajouté un quote avant et après la ligne que je voulais isoler afin de le mettre dans un tableau séparé par les quotes. Et après je filtre sur username.
Mais bon ça marche pas très bien...
Je vais tester ton truc c tricky! (heu enfin si je pouvais savoir comment isoler bobo...)
Merci pour ton aide!!
Dark
Marsh Posté le 29-03-2007 à 17:31:14
Par ailleurs si tu veux remplacer bobo par 2 double quotes :
objFile.Write tbl(0) & """""" & tbl(1)
Marsh Posté le 29-03-2007 à 17:32:45
Et qu'est ce qui ne varie jamais dans ce bon sang de fichier texte qu'on peut isoler ?
Marsh Posté le 29-03-2007 à 17:35:58
Si tu as la main sur ce fichier texte, au départ, tu n'as qu'a ajouter un bon vieux * à un endroit précis.. facile à repérer car unique.
Marsh Posté le 29-03-2007 à 17:36:47
Je vois ce que tu veux dire. Je vais essayer un truc en rajoutant mes propres bornes genre faire un split sur 'banana que je rajoute avant et après ma ligne.
A plus!
Dark
Marsh Posté le 29-03-2007 à 17:40:33
inspire-toi de ça :
|
Marsh Posté le 29-03-2007 à 17:40:46
fais attention quand même, si un utilisateur s'appelle banana, ca va planter...
Marsh Posté le 29-03-2007 à 17:42:16
(y'a que ça qui t'intéresse d'ailleurs )
|
=> tu rajoute un test dans la boucle lorsque les premiers caractères d'un trim sur le readline ramène username=, et tu remplaces la fin de la ligne par la valeur que tu veux.
Marsh Posté le 29-03-2007 à 17:42:57
(en tout cas, quand je vois les solutions que vous avez testez, je comprends pourquoi la réputation de VB et VBS )
ca va pas un peu la tête ?
Marsh Posté le 29-03-2007 à 17:46:26
Quoi ????
Mais t'as vu la longueur de ton code pour un malheureux remplacement de chaine ?
Donne des solutions, plutot que de te foutre gentilment de nous ?
C'est comme pour mon "gif sur userform", j'attends tjs ta solution plus rapide et plus simple...
Marsh Posté le 29-03-2007 à 17:57:58
Re,
ça marche du feu de dieu, j'ai enfin plié mon mode kiosk
dim strtext
Set filesys = CreateObject("Scripting.FileSystemObject" )
Set objFile = filesys.OpenTextFile("chemin de mon ini", 1)
strText = objFile.ReadAll
tbl= split(strText,"'banane" ) 'On prend un banana split
objFile.Close
Set objFile = filesys.OpenTextFile("le chemin de mon ini qui change pas", 2)
objFile.Write tbl(0)&"'banane"&vbnewline&"username="&vbnewline&"'banane"&vbnewline&tbl(2)
objFile.Close
Et ça suffit largement pour le résultat que j'en attends. Merci bien april the hokage the fifth, je déploie sur des postes pilotes demain.
Je testerai pour moi la soluce de magicbuzz l'éclair
Allez tout le monde il est bo, je vous aime tous
Tchao!
Dark
Marsh Posté le 29-03-2007 à 19:12:23
Mais vire-moi ce ReadAll et ce split
Tu fais quoi le jour où :
-> T'as un autre banane dans ton fichier ?
-> Ton banane n'est plus présent ?
-> Ton fichier fait 16 Go ? (dans ce cas là ma solution reste lente, mais au moins, ne consomme pas plus de 1Ko de mémoire, là où ta solution fait exploser WSH)
Marsh Posté le 30-03-2007 à 03:57:49
Allez, sois beau joueur... ca marche
... Et le jour où :
il a un autre banane dans son fichier : il fait un milkshake
sa banane n'est plus présente : il trouve d'autres fruits
son fichier fait 16 Go : il chope un core 2 duo
bonne nuit
Marsh Posté le 30-03-2007 à 09:55:14
salut!
- le jour où yaura banane dans mon fichier, je veux bien payer une glace à toute la boite
- Pq ma banane serait plus présente?
- mon fichier ini sert pour le lancement d'un client léger; il fait 15 lignes soit 800 ko à peu près...
Et pis c'est qu'une solution de temp (un ispèce de kiosk avt d'acheter des boitiers...)
Et pis vous allez l'air de bien vous connaitre c marrant
et pis à plus!
Dark
Marsh Posté le 30-03-2007 à 13:48:30
Que ce soit un prototype, une micro application ou quoi que ce soit d'autre, rien n'empêche de travailler proprement quand on en a les moyens.
Il se trouve que j'ai fourni une solution propre, qui nécessite moins de code, sera capable de s'adapter si un jour les besoins évoluent, et surtout, qui est sémantiquement correcte. Je ne parle pas non plus de refactorisation, qui éviterait de revenir ici le jour où il vous aurez le même besoin pour une application qui ne permet pas d'utiliser la solution batarde du split.
La solution adpotée fonctionne, ça c'est sûr. Tout comme je peux atteler un beouf à ma voiture si je sais pas mettre le contact. Mais après faut pas s'étonner si on a un truc bancale et qu'aucun garagiste ne veut s'en approcher.
L'informatique c'est pareil. Y'a toujours moyen de trouver la pire solution qui existe. Faut pas venir se plaindre le jour où ça ne marche pas.
Marsh Posté le 29-03-2007 à 16:57:52
Bonjour!
Je galère sur un script tout simple depuis plusieurs heures...
Il s'agit de trouver une chaine dans un fichier texte puis de le remplacer par une autre. Concrètement, username=bobo doit être remplacé par username="".
Voici mon code tout pourri :
dim tbl,tblfilter
Set filesys = CreateObject("Scripting.FileSystemObject" )
Set objFile = filesys.OpenTextFile("C:\Documents and Settings\me\Mes documents\kiosk\config.ini", 1)
strText = objFile.ReadAll
tbl= split(strText,"'" )
tblfilter=filter(tbl,"usern" )
objFile.Close
strNewText = Replace(strText, tblfilter(0), "username=" )
Set objFile = filesys.OpenTextFile("C:\Documents and Settings\pn\Mes documents\kiosk\config.ini", 2)
objFile.WriteLine strNewText
objFile.Close
WScript.Quit
Ma dernière tentative fut de faire un split et un filter.
sinon avt j'avais tenté un replace avec un mid...
Je désespère...
Merci pour l'aide
A plus
Dark
PS : au fait la chaine après username varie tout le temps... (sinon un replace aurait été facile)
Message édité par darkbol le 29-03-2007 à 17:59:24