Selection dans un fichier de plusieurs chaines de caracteres et suppression des

Résolu
HUBMBA
Messages postés
5
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
2 février 2011
- 1 févr. 2011 à 22:34
lediablo
Messages postés
215
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
2 août 2012
- 4 févr. 2011 à 18:17
je viens vers vous car je souhaite par un script en VBS lire un fichier quelconque et verifier l'existence de plusieurs chaines de caracteres, et quand cette chaine de caracteres existe, le but est de supprimer la ligne en question.

ce script en est un exemple, mais je ne peux que supprimer une seule ligne avec une seule chaine de caractere a la fois. comment puis-je faire pour mettre plusieurs chaines de caracteres et supprimer toutes les lignes s'y rapportant?

' Delete Lines of a Text File Beginning with a Specified String



Const FOR_READING = 1
Const FOR_WRITING = 2
strFileName = "C:\scripts\PORTABLE_HUBERT-WINAUDIT.txt"
strCheckForString = UCase("| Domain Name")


Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
strContents = objTS.ReadAll
objTS.Close

arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)

For Each strLine In arrLines
If Not(Left(UCase(LTrim(strLine)),Len(strCheckForString)) = strCheckForString) Then
objTS.WriteLine strLine
End If
Next

7 réponses

lediablo
Messages postés
215
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
2 août 2012

4 févr. 2011 à 18:17
clic sur réponse accepter


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
3
lediablo
Messages postés
215
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
2 août 2012

1 févr. 2011 à 23:52
bonsoir aussi

Const ForWriting = 2
strFileName = "chemin du fichier"
strCheck1 = "variable à supprimer"
strCheck2 = "variable à supprimer"
strCheck3 = "variable à supprimer"
strCheck4 = "variable à supprimer"
strCheck5 = "variable à supprimer"
dim all 'variable qui va contenir le nouveau contenu du fichier
all = ""
'lire un fichier ligne par ligne
Set test = CreateObject("Scripting.FileSystemObject")
Set vbfrance = test.OpenTextFile(strFileName)
Do While Not vbfrance.AtEndOfStream
      ligne = vbfrance.Readline
if (instr (ligne , strCheck1)) <= 0  then
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck2)) <= 0  then
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck3)) <= 0  then 
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck4)) <= 0  then 
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck5)) <= 0  then
all = all & ligne & vbcrlf
end if
Loop
'on ferme le fichier
vbfrance.close
'on enregistre notre nouveau contenu sans les lignes supprimer
Set test2 = CreateObject("Scripting.FileSystemObject")
Set vbfrance2 = test2.OpenTextFile(strFileName, ForWriting,true)
vbfrance2.write(all)
vbfrance2.close


tu peut choisir une infinité de variable

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
HUBMBA
Messages postés
5
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
2 février 2011

2 févr. 2011 à 00:36
Bonsoir,
Je viens de tester le scripot que vous vez posté en remplacant toutes les variables par les miennes et il ne se passe rien. le script se lance et ne s'arrete jamais. y a t-il une erreur dans ce que j'ai entré ? je souhaite egalement enlever toutes les lignes blanches (vides) en entrant la variable "".

Const ForReading = 1
Const ForWriting = 2
strFileName = "C:\scripts\PORTABLE_HUBERT-WINAUDIT.txt"
strCheck1 = "-------------"
strCheck2 = "Résumé du Système"
strCheck3 = "| Item"
strCheck4 = "| Site Name"
strCheck5 = ""
dim all 'variable qui va contenir le nouveau contenu du fichier
all = ""
'lire un fichier ligne par ligne
Set test = CreateObject("Scripting.FileSystemObject")
Set vbfrance = test.OpenTextFile(strFileName)
Do While Not vbfrance.AtEndOfStream
ligne = vbfrance.Readline
if (instr (ligne , strCheck1)) <= 0 then
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck2)) <= 0 then
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck3)) <= 0 then
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck4)) <= 0 then
all = all & ligne & vbcrlf
elseif (instr (ligne , strCheck5)) <= 0 then
all = all & ligne & vbcrlf
end if
Loop
'on ferme le fichier
vbfrance.close
'on enregistre notre nouveau contenu sans les lignes supprimer
Set test2 = CreateObject("Scripting.FileSystemObject")
Set vbfrance2 = test2.OpenTextFile(strFileName, ForWriting,true)
vbfrance2.write(all)
vbfrance2.close

y a t-il une erreur a votre avis ?

HM
0
HUBMBA
Messages postés
5
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
2 février 2011

2 févr. 2011 à 01:16
Le script me renvoie le code suivant mais ne fait rien dans le fichier:

***** script completed - exit code: 0 *****

je pense que le probleme est au niveau du
Do While
loop

Quelqu'un voit-il ce qui manque?
HM
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lediablo
Messages postés
215
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
2 août 2012

2 févr. 2011 à 11:00
ohhhhh

Do While Not vbfrance.AtEndOfStream
      ligne = vbfrance.Readline
if (instr (ligne , strCheck1)) <= 0  and _
(instr (ligne , strCheck2)) <= 0  and _
(instr (ligne , strCheck3)) <= 0  and _
                (instr (ligne , strCheck4)) <= 0  and _
                (instr (ligne , strCheck5)) <= 0  then
all = all & ligne & vbcrlf
end if
Loop




Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
lediablo
Messages postés
215
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
2 août 2012

2 févr. 2011 à 11:01
et pour savoir si la ligne est vide ou pas

Do While Not vbfrance.AtEndOfStream
ligne = vbfrance.Readline
if (instr (ligne , strCheck1)) <= 0 and _
(instr (ligne , strCheck2)) <= 0 and _
(instr (ligne , strCheck3)) <= 0 and _
(instr (ligne , strCheck4)) <= 0 and _
(instr (ligne , strCheck5)) <= 0 and _
ligne <> "" then
all = all & ligne & vbcrlf
end if
Loop

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
0
HUBMBA
Messages postés
5
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
2 février 2011

2 févr. 2011 à 13:04
Merci voici le resultat final, du script qui marche a la perfection:

Const FOR_READING = 1
Const FOR_WRITING = 2
strFileName = "C:\scripts\PORTABLE_HUBERT-WINAUDIT.txt"
strCheck1 = "-------------"
strCheck2 = "Résumé du Système"
strCheck3 = "| Item"
strCheck4 = "| Site Name"
strCheck5 = "| Connection Status"
strCheck6 = "| ________ |"

dim all 'variable qui va contenir le nouveau contenu du fichier
all = ""

'lire un fichier ligne par ligne
Set test = CreateObject("Scripting.FileSystemObject")
Set vbfrance = test.OpenTextFile(strFileName, FOR_READING)
Do While Not vbfrance.AtEndOfStream
ligne = vbfrance.Readline
if (instr (ligne , strCheck1)) <= 0 and _
(instr (ligne , strCheck2)) <= 0 and _
(instr (ligne , strCheck3)) <= 0 and _
(instr (ligne , strCheck4)) <= 0 and _
(instr (ligne , strCheck5)) <= 0 and _
(instr (ligne , strCheck6)) <= 0 and _
ligne <> "" then
all = all & ligne & vbcrlf

end if
Loop
'on ferme le fichier
vbfrance.Close

'on enregistre notre nouveau contenu sans les lignes supprimees
Set test2 = CreateObject("Scripting.FileSystemObject")
Set vbfrance2 = test2.OpenTextFile(strFileName, FOR_WRITING,true)
vbfrance2.write(all)
vbfrance2.close
0