Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBS] modifier contenu fichier texte

17 réponses
Avatar
Gael
bonjour,

je cherche à modifier le contenu d'un fichier texte de maniere simple.
sachant que le fichier texte n'a pas de format particulier.

mon problème et que je n'arrive pas à "modifier" du texte... j'arrive à
ecrire et lire, mais comment faire pour modifier juste une partie d'un
fichier texte?

Merci

7 réponses

1 2
Avatar
sympatix
y'a t il, à premiere vue, des éléments gênant?
des commentaires?


On error Resume Next est mis 2x. Déjà 1x, c'est pas idéal pour déboger un
script.
Vire les 2, et lance le script. Le script doit effectuer correctement son
boulot, et tu ne devrais pas avoir d'erreur.
Si ce n'est pas le cas, localise le problème, et s'il y a une erreur, quelle
est-elle, et à quelle ligne, et essaye de la résoudre.

Et n'hésite pas à revenir.
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

Avatar
Jacques Barathon [MS]
"Gael" wrote in message
news:
Merci à tous :)
c'est ce que je pensais, vbs n'est pas vraiment approprié pour cela.. mais
bon.

j'attend Jacques pour la démonstration MSH (?) avec plaisir ;)


Désolé d'avoir tardé pour cette démonstration plébiscitée ;-), j'ai été
absent quelques jours...

Pour remplacer une chaîne de caractères dans un fichier texte je m'y
prendrais de cette façon:

--- couper ici ---
$oldfile = $(get-content vieuxfichier.txt)
$newfile = $oldfile -replace "avant","après"
set-content nouveaufichier.txt -value $newfile
--- couper ici ---

Dans cet exemple, j'affecte le contenu de vieuxfichier.txt à la variable
$oldfile.
Ensuite, j'applique sur tout le contenu le remplacement de la chaîne "avant"
par la chaîne "après" et j'affecte le résultat à la variable $newfile.
Précision importante: toutes les occurrences de la chaîne "avant" seront
remplacées, y compris si elle est incluse dans une autre chaîne. Si par
exemple on a la ligne "avantages et inconvénients", le remplacement
ci-dessus donnera une ligne "aprèsages et inconvénients".
Pour finir, j'écris le contenu de $newfile dans un nouveau fichier
nouveaufichier.txt.

Cette technique est à la fois très simple et très performante, car une fois
le contenu affecté à une variable on peut y effectuer toutes les
manipulations possibles. Il faut savoir qu'un fichier texte sera
automatiquement affecté à un tableau, chaque entrée du tableau correspondant
à une ligne de texte. On pourrait donc par exemple faire:

$oldfile[0..9] # affiche les 10 premières lignes de texte
$oldfile[($oldfile.length-1)..0] # lit le contenu à l'envers, de la
dernière à la première ligne
$oldfile | where {$_ -match "^http:"} # affiche les lignes qui commencent
par "http:"

Si l'on veut manipuler un fichier trop volumineux pour être affecté en bloc
à une variable (par exemple un fichier log de plusieurs méga-octets), on
peut le parcourir ligne par ligne et faire les changements à la volée.
L'équivalent du script ci-dessus donnera donc en une seule ligne:

get-content vieuxfichier.txt | foreach {$_ -replace "avant","après" |
add-content nouveaufichier.txt}

Voilà les bases, du moins les miennes qui sont très modestes. Après, les
possibilités sont celles du langage Monad, c'est-à-dire très vastes.

Jacques

Avatar
Jean
Désolé d'avoir tardé pour cette démonstration plébiscitée ;-), j'ai été
absent quelques jours...


Merci.
Je désepérais :O) ... moi je serais rentré de congé :-)

Vous parlez de connaissances modestes.
C'est une impression que j'ai souvent avec MSH.
Il est vrai que MSH est très vaste (pour ma part c'est surtout
l'interraction avec .Net ... parceque je dois bien reconnaître que
c'est MSH qui me mène à .Net et pas l'inverse) mais il est vrai aussi,
comme l'illustre votre démonstration, qu'avec MSH on fait beaucoup
avec très peu (ça devient frustrant :O) )

Amicalement,

--
Jean - JMST
Belgium

Avatar
Jacques Barathon [MS]
"Jean" wrote in message
news:
Désolé d'avoir tardé pour cette démonstration plébiscitée ;-), j'ai été
absent quelques jours...


Merci.
Je désepérais :O) ... moi je serais rentré de congé :-)


Je sais, je ferai mieux la prochaine fois. Il faudrait que je m'installe un
service qui lise les newsgroups et m'envoie un SMS quand certains critères
sont remplis, comme par exemple la présence à la fois de "Jacques" et de
"MSH" dans le même post. :-)

Vous parlez de connaissances modestes.
C'est une impression que j'ai souvent avec MSH.
Il est vrai que MSH est très vaste (pour ma part c'est surtout
l'interraction avec .Net ... parceque je dois bien reconnaître que c'est
MSH qui me mène à .Net et pas l'inverse) mais il est vrai aussi, comme
l'illustre votre démonstration, qu'avec MSH on fait beaucoup avec très peu
(ça devient frustrant :O) )


Ce qui me plaît avec Monad (j'ai cru comprendre qu'on ne devais plus
utiliser l'appellation MSH, il faudra que je vérifie où on en est
exactement), c'est justement sa compacité, décuplée par l'usage du
"pipeline". Je fais pas mal de choses en ligne de commande, rarement des
vrais scripts en tant que tels, et j'apprécie de pouvoir enchaîner plusieurs
commandes sur une même ligne pour arriver au résultat souhaité.

Quant à l'interaction avec .Net: au début de mon usage de Monad, j'ai passé
pas mal de temps à manipuler le système via WMI (get-wmiobject permet
d'accéder à n'importe quel objet WMI). Très pratique, mais il y a certaines
limites car tout l'univers Windows n'est pas accessible par WMI. J'ai donc
commencé plus récemment à regarder ce qu'il est possible de faire avec le
framework .Net et là, effectivement, le champ des possibilités est immense.

Je conseille d'ailleurs l'excellent outil .Net Reflector pour explorer les
API du framework:
http://www.aisto.com/roeder/dotnet

Jacques


Avatar
Gael
Encore une question, comment rechercher et écrire des " dans un fichier?

rechercher :

key="exemple"

ou l'écrire..

"
/"
$"
%" ...?

Merci


y'a t il, à premiere vue, des éléments gênant?
des commentaires?


On error Resume Next est mis 2x. Déjà 1x, c'est pas idéal pour déboger un
script.
Vire les 2, et lance le script. Le script doit effectuer correctement son
boulot, et tu ne devrais pas avoir d'erreur.
Si ce n'est pas le cas, localise le problème, et s'il y a une erreur, quelle
est-elle, et à quelle ligne, et essaye de la résoudre.

Et n'hésite pas à revenir.
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr






Avatar
jbongran
Gael wrote:
Encore une question, comment rechercher et écrire des " dans un
fichier?

rechercher :

key="exemple"

ou l'écrire..

"
/"
$"
%" ...?

Merci


y'a t il, à premiere vue, des éléments gênant?
des commentaires?


On error Resume Next est mis 2x. Déjà 1x, c'est pas idéal pour
déboger un script.
Vire les 2, et lance le script. Le script doit effectuer
correctement son boulot, et tu ne devrais pas avoir d'erreur.
Si ce n'est pas le cas, localise le problème, et s'il y a une
erreur, quelle est-elle, et à quelle ligne, et essaye de la résoudre.

Et n'hésite pas à revenir.
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr



Il faut les doubler ainsi pour ecrire key="exemple", il faudrait coder
objet.WriteLine "key=""exemple"""
ou les remplacer par leur code ascii
objet.WriteLine "key=" & Chr(34) & "exemple" & Chr(34)



Avatar
Gael
Argh.. les doubler.. j'avais pas essayé ça :)


Gael wrote:
Encore une question, comment rechercher et écrire des " dans un
fichier?

rechercher :

key="exemple"

ou l'écrire..

"
/"
$"
%" ...?

Merci


y'a t il, à premiere vue, des éléments gênant?
des commentaires?


On error Resume Next est mis 2x. Déjà 1x, c'est pas idéal pour
déboger un script.
Vire les 2, et lance le script. Le script doit effectuer
correctement son boulot, et tu ne devrais pas avoir d'erreur.
Si ce n'est pas le cas, localise le problème, et s'il y a une
erreur, quelle est-elle, et à quelle ligne, et essaye de la résoudre.

Et n'hésite pas à revenir.
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr



Il faut les doubler ainsi pour ecrire key="exemple", il faudrait coder
objet.WriteLine "key=""exemple"""
ou les remplacer par leur code ascii
objet.WriteLine "key=" & Chr(34) & "exemple" & Chr(34)








1 2