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

10 réponses

1 2
Avatar
sympatix
Salut !
je cherche à modifier le contenu d'un fichier texte de maniere simple.
En VBS, on peut ouvrir un fichier texte de 3 manières:

1: En Lecture
2: En Ecriture (écrasement du flux de texte existant par ce que tu vas
écrire)
3: En écriture avec uniquement ajout de nouvelles données à la fin du
fichier

Si tu veux modifier ou ajouter du texte au milieu du fichier, tu ne peux pas
le faire directement, mais il faudra user d'astuces en recopiant une partie
du texte de ton fichier dans un autre, puis, en rajoutant à l'endroit désiré
ton texte modifié, puis, en recopiant à la suite la fin du texte de ton 1er
fichier. Ensuite, tu renommes ton 2e fichier, et le tour est joué. Je t'ai
donné les grandes lignes. C'est vrai que c'est assez lourd à faire, mais je
ne connais pas d'autres solutions en VBS.
Si tu as un souci, n'hésite pas à revenir.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/62045015-70d8-4308-a74a-71de0166e6ec.asp

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Gael" a écrit dans le message de news:

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


Avatar
bayosky
Dans le message ,
bonjour,

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



Fanchement le VBS n'est pas spécialement prévu pour des manip "fine"
sur les fichier...
puisque l'objet TextStream a des possibilités limités.
L'ouverture est soit en écriture soit en lecture, pas les deux en même
temps.

j'aime bien Tout = monfichier.ReadAll
après tu découpes Progressivement avec Split
en paragraphe (VbCrLf)
puis chaque paragraphe en phrase ( "." ; "!" "?" )
puis chaque phrase en "partie" ( , et ; )
puis chaque partie en mots ( espaces) ...

Tu peut ainsi fabriquer un grand tableau qui contiendra de quoi
reconstituer exactement le "texte" et dans lequel les divers éléments
sont séparés...

Ceci étant la statégie à adopter dépend fortement
de ce que peuvent concrètement contenir tes fichiers
et des modifs que tu désires y faire ...

HB

Avatar
Jean
Fanchement le VBS


... le File System Object plutôt ;-)

Sinon l'accès au système de fichier de MSH est très performant.

Je laisse le plaisir à Jacques de vous montrer ça :-)

Amicalement,

--
Jean - JMST
Belgium

Avatar
Gael
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 ;)


Fanchement le VBS


.... le File System Object plutôt ;-)

Sinon l'accès au système de fichier de MSH est très performant.

Je laisse le plaisir à Jacques de vous montrer ça :-)

Amicalement,

--
Jean - JMST
Belgium






Avatar
Gael
re,

j'ai trouvé pas mal d'infos sur l'art et surtout la manière de travailler
avec les fichier (texte).

mais je n'arrive pas, dans une ligne, a (en gros) trouver la bonne valeur à
changer. notamment parce que celà dépend du début de la ligne!

<ref="ref1" value="20" />
vers
<ref="ref1" value="200" />
le tout avec X lignes avant et après...

j'arrive à trouver la ligne, mais après..




Salut !
je cherche à modifier le contenu d'un fichier texte de maniere simple.
En VBS, on peut ouvrir un fichier texte de 3 manières:

1: En Lecture
2: En Ecriture (écrasement du flux de texte existant par ce que tu vas
écrire)
3: En écriture avec uniquement ajout de nouvelles données à la fin du
fichier

Si tu veux modifier ou ajouter du texte au milieu du fichier, tu ne peux pas
le faire directement, mais il faudra user d'astuces en recopiant une partie
du texte de ton fichier dans un autre, puis, en rajoutant à l'endroit désiré
ton texte modifié, puis, en recopiant à la suite la fin du texte de ton 1er
fichier. Ensuite, tu renommes ton 2e fichier, et le tour est joué. Je t'ai
donné les grandes lignes. C'est vrai que c'est assez lourd à faire, mais je
ne connais pas d'autres solutions en VBS.
Si tu as un souci, n'hésite pas à revenir.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/62045015-70d8-4308-a74a-71de0166e6ec.asp

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Gael" a écrit dans le message de news:

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







Avatar
sympatix
j'ai trouvé pas mal d'infos sur l'art et surtout la manière de travailler
avec les fichier (texte).

mais je n'arrive pas, dans une ligne, a (en gros) trouver la bonne valeur
à
changer. notamment parce que celà dépend du début de la ligne!

<ref="ref1" value="20" />
vers
<ref="ref1" value="200" />
le tout avec X lignes avant et après...

j'arrive à trouver la ligne, mais après..


Je ne saisi pas exactement quel est ton problème. Voici un petit exemple qui
t'aidera je l'éspère à mieux faire ce que tu veux.
Cet exemple ouvre le fichier toto.txt, situé à la racine de C, lit
chaque ligne, si elle ressemble à "Ligne à modifier", copie la chaine "Ligne
modifiée" dans un nouveau fichier nommé titi.txt, sinon, recopie simplement
la ligne lue. A la fin, le fichier titi.txt est renommé en toto.txt. Et la
ligne "Ligne à modifier" est bien remplacée par "Ligne modifiée".
Pour le test, il faut juste créer à la racine de C le fichier toto.txt, qui
peut contenir n'importe quoi, mais avec au moins une ligne qui ne contient
que la chaine "Ligne à modifier", sans les guillemets. Après le lancement du
script, cette ligne
sera remplacée par "Ligne modifiée".

(attention aux coupures éventuelles de lignes dues à certains lecteurs de
news)

--------Début du script--------
Const Pour_Lire = 1
Const Pour_Ecrire = 2
AModif = "Ligne à modifier"
Modif = "Ligne modifiée"
Fichier1 = "C:toto.txt"
Fichier2 = "C:titi.txt"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile (Fichier1, Pour_Lire)
Set F2 = oFSO.CreateTextFile (Fichier2, Pour_Ecrire, False)
Do Until F1.AtEndOfStream
Lit = F1.ReadLine
If Lit = AModif Then
F2.WriteLine Modif
Else
F2.WriteLine Lit
End If
Loop
Set F1 = Nothing
Set F2 = Nothing
oFSO.DeleteFile Fichier1
oFSO.MoveFile Fichier2, Fichier1
--------Fin du script--------
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

Avatar
sympatix
Petite erreur, mais qui ne changeait pas le comportement du script:

la ligne:
Set F2 = oFSO.CreateTextFile (Fichier2, Pour_Ecrire, False)

doit en fait être:
Set F2 = oFSO.CreateTextFile (Fichier2, True, True)

le 2e argument (True) correspond en fait à l'écrasement du fichier s'il
existe, et non comme je l'avais mis avant, à l'ouverture en Ecriture, car,
forcément, l'ouverture d'un fichier créé, ne peut se faire qu'en écriture.
Le script fonctionnait quand même, car le 2e argument étant la constante
"Pour_Ecrire", donc, 2, était compris comme True, et en plus, si titi.txt
n'existait pas avant, le problème ne se posait même pas !

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr
Avatar
sympatix
Encore gourré !

à la ligne:
Set F2 = oFSO.CreateTextFile (Fichier2, True, True)

il faut mettre le 3e argument à false, pour écrire en code ASCII, sinon, en
unicode, ça donne des yéroglyphes chez moi.
donc:
Set F2 = oFSO.CreateTextFile (Fichier2, True, False)

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr
Avatar
Gael
Merci pour tout ça :)

je prépare mon script et je reviens pour corriger/optimiser un peu ;)

Merci


Encore gourré !

à la ligne:
Set F2 = oFSO.CreateTextFile (Fichier2, True, True)

il faut mettre le 3e argument à false, pour écrire en code ASCII, sinon, en
unicode, ça donne des yéroglyphes chez moi.
donc:
Set F2 = oFSO.CreateTextFile (Fichier2, True, False)

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr





Avatar
Gael
Et voilà le résultat (certainement pas optimisé, mais c'est la prochaine
étape) :

---------------
Option Explicit

Const To_Read = 1 'option for opentextfile
Const To_Write= 2

Const Folder = "C:test"
Const FileToModify = "test.txt"
Const Filetemp = "Tempfile.txt"


Dim File1
Dim File2
Dim Read, readModify 'line to read, line if modification
Dim oFSO, F1, F2
Dim strComputer, ObjNicConfig, colNicConfigs, strDNSHostname, strDNSDomain,
objWMIService 'some hostname and dns search dim
Dim OldValue, StrKey, NewValue 'to change value
On Error Resume Next



'
'Search Hsotname and DNS Info
'
On error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colNicConfigs = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")


For Each objNicConfig In colNicConfigs
strDNSHostName = objNicConfig.DNSHostName
strDNSDomain = objNicConfig.DNSDomain
Next


'WScript.Echo VbCrLf & "Host Name: " & strDNSHostName & "." & strDNSDomain


'
'define dim
'
Strkey = "http://" & strDNSHostname & "/Reportserver"
OldValue = strkey
NewValue = "http://" & strDNSHostname & "." & strDNSDomain & "/Reportserver"

File1 = Folder & FileToModify
File2 = Folder & FileTemp

'
'open file, create tmpfile, read file, modify if necessary and rewrite
'
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile (File1, To_Read)
Set F2 = oFSO.CreateTextFile (File2, True, False)

Wscript.Echo "File 1 " & File1 & vbCrLf &_
"file2 " & File2 & vbCrLf &_
"strkey " & strkey & vbCrLf &_
"OldValue " & oldValue & vbCrLf &_
"Newvalue " & Newvalue & vbCrLf &_
"strDNSHostname " & strDNSHostname & vbCrLf &_
"strDNSDomain " & strDNSDomain & vbCrLf

Do Until F1.AtEndOfStream
Read = F1.ReadLine
If instr(Read,strkey)<> 0 Then
ReadModify = Replace(read, OldValue, NewValue)
F2.WriteLine ReadModify
Else
F2.WriteLine Read
End If
Loop
Set F1 = Nothing
Set F2 = Nothing
oFSO.CopyFile File1, Folder & FileToModify & ".OLD"
oFSO.DeleteFile File1
oFSO.CopyFile File2, File1
oFSO.Deletefile file2

-------------------


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

des commentaires?
Merci


Merci pour tout ça :)

je prépare mon script et je reviens pour corriger/optimiser un peu ;)

Merci


Encore gourré !

à la ligne:
Set F2 = oFSO.CreateTextFile (Fichier2, True, True)

il faut mettre le 3e argument à false, pour écrire en code ASCII, sinon, en
unicode, ça donne des yéroglyphes chez moi.
donc:
Set F2 = oFSO.CreateTextFile (Fichier2, True, False)

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr







1 2