Page 1 sur 1
[R] Suppression de texte entre deux mots spécifiques
Posté : mar. 10 juin 2014 23:11
par EvilRyu
Bonjour à tous!
J'ai un fichier
test.txt dans lequel il y a ce texte:
Blablabla blablabla blabla et hop ici le texte à supprimer youpla blabla blablaa blabla
Blablablabla blablablabla blablablabla blablablablablabla blablablablabla blablablablabla blablablablablabla
Blablabla blablab blablabla et hop encore un texte à supprimer youpla blablablablabla
Blablablabla blablablabla blablablabla blablablablablabla blablablablabla blablablablabla blablablablablabla
Blablabla et hop le dernier texte à supprimer youpla blablablablabla.
Je voudrais donc supprimer les textes situés entre
et hop et
youpla,
ainsi que ces deux mots eux-mêmes! Ces mots seront toujours les mêmes.
J'ai tenté quelques scripts glanés par ci par là, mais sans succès. Je me tourne donc vers vous, en espérant que vous aurez le temps de me concocter un petit quelque chose
Merci!

Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mar. 10 juin 2014 23:42
par jchd
Quelque chose comme ça ?
Code : Tout sélectionner
Local $sText = "Blablabla blablabla blabla et hop ici le texte à supprimer youpla blabla blablaa blabla" & @CRLF & _
"Blablablabla blablablabla blablablabla blablablablablabla blablablablabla blablablablabla blablablablablabla" & @CRLF & _
"Blablabla blablab blablabla et hop encore un texte à supprimer youpla blablablablabla" & @CRLF & _
"Blablablabla blablablabla blablablabla blablablablablabla blablablablabla blablablablabla blablablablablabla" & @CRLF & _
"Blablabla et hop le dernier texte à supprimer youpla blablablablabla."
ConsoleWrite(StringRegExpReplace($sText, "(et hop.*?youpla )", "") & @LF)
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 21:06
par EvilRyu
Merci de ta réponse!
Le texte se trouve sur un fichier extérieur, mais on ne dirait pas que le script fonctionne dessus
Voici ce que j'ai actuellement:
Code : Tout sélectionner
$szFile = @ScriptDir & "/fichier.txt"
$szText = FileRead($szFile,FileGetSize($szFile))
$szText = (StringRegExpReplace($szText, "(et hop.*?youpla)", "") & @LF)
FileDelete($szFile)
FileWrite($szFile,$szText)
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 21:13
par jguinch
Ca marche plutôt bien pourtant...
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 21:26
par EvilRyu
Est-ce peut-être parce que le vrai texte a détecter contient des caractères spéciaux? A savoir des crochets:
Code : Tout sélectionner
$szFile = @ScriptDir & "/fichier.txt"
$szText = FileRead($szFile,FileGetSize($szFile))
$szText = (StringRegExpReplace($szText, "([b][ list ][/b].*?[b][ /list ][/b])", "") & @LF)
FileDelete($szFile)
FileWrite($szFile,$szText)
En fait ce script sert a modifier des suuper-longs posts de forums en supprimant des balises LIST et leur contenu.
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 21:47
par jguinch
Oui, les crochets doivent être "échappés" car ils sont utilisés dans les expressions régulières :
$szText = (StringRegExpReplace($szText, "(\[ list \].*?\[ /list \])", "") & @LF)
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 22:09
par EvilRyu
Ah ok! On avance
Code : Tout sélectionner
$szFile = @ScriptDir & "/fichier.txt"
$szText = FileRead($szFile,FileGetSize($szFile))
$szText = (StringRegExpReplace($szText, "(\[ list \].*?\[ /list \])", "") & @LF)
FileDelete($szFile)
FileWrite($szFile,$szText)
Alors ça fonctionne si le texte est sur une ligne
Code : Tout sélectionner
[ list ] test [ /list ] lol [ list ] test [ /list ] lol [ list ] test [ /list ] lol

donne bien
lol lol lol
Mais vu que mon texte contient des retours a la ligne, ca ne fait rien du tout
Code : Tout sélectionner
[ list ]
test
[ /list ]
lol
[ list ]
test
[ /list ]
lol
[ list ]
test
[ /list ]
lol
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 22:15
par jguinch
Il faut spécifier dans ton expression que la recherche inclue les sauts de ligne :
$szText = (StringRegExpReplace($szText, "(?s)(\[ list \].*?\[ /list \])", "") & @LF)
Re: [..] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 22:37
par EvilRyu
PARFAIT!
Merci beaucoup c'est vraiment sympa! En plus j'ai beaucoup appris

Re: [R] Suppression de texte entre deux mots spécifiques
Posté : mer. 11 juin 2014 22:39
par jguinch
Juste une petite remarque, les parenthèses ne sont pas utiles ici :
$szText = StringRegExpReplace($szText, "(?s)(\[ list \].*?\[ /list \])", "") & @LF