Page 1 sur 1

[R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 12:51
par Boulanza
Bonjour à tous,
Je souhaiterais supprimer toute la ligne contenant le mot "TOTO" qui se trouve dans un fichier texte .
Je dis bien, supprimer toute la ligne contenant le mot "TOTO".
$fichier = @ScriptDir & "\Config.txt"
$file = FileRead($fichier)
$resultat =StringRegExpReplace($file,"TOTO\s*", "", "")
Sleep(100)
FileDelete(@ScriptDir & "\sortie.txt")
Filewrite(@ScriptDir & "\sortie.txt", $resultat)
Merci d'avance pour votre aide.
Cordialement.

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 13:41
par mikell
Voilà
Pour ne pas supprimer en même temps le retour à la ligne, enlever le "\R?"
$resultat =StringRegExpReplace($file,'(?m)^.*?TOTO.*$\R?', "", "")

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 15:08
par Boulanza
Merci mikell,
Juste un tout petit souci:
Si on ajoute $ au mot TOTO soit $TOTO. Votre code ne marche pas, notamment - (?m)^.*?TOTO.*$\R?' -
Est ce que une boucle marcherait si on a des mots diffèrent ?
Cordialement.

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 15:47
par rgx
Hello,

J'ajouterai une limite de mot (\b pour boundary) pour éviter de prendre les lignes où TOTO fait partie d'un autre mot (ex: TOTOTUTU)

Code : Tout sélectionner

^.*?\bTOTO\b.*$
Edit: @Boulanza $ étant un caractère réservé, il faut alors « l'échapper» avec un antislash \$

:wink:

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 16:16
par Tlem
Boulanza a écrit : dim. 07 mars 2021 15:08 Juste un tout petit souci:
Si on ajoute $ au mot TOTO soit $TOTO. Votre code ne marche pas
Sur votre demande initiale vous avez précisé :
Boulanza a écrit : dim. 07 mars 2021 12:51Je souhaiterais supprimer toute la ligne contenant le mot "TOTO" qui se trouve dans un fichier texte .
Je dis bien, supprimer toute la ligne contenant le mot "TOTO".
Ceci sous entends qu'il s'agit d'un mot entier et non d'une chaine de caractères.
Si la demande est différente, alors merci de préciser TOUTES LES CONTRAINTES au départ et non au fil des réponses. Cela évitera des pertes de temps inutiles.

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 16:43
par mikell
Dernier détail pour les caractères spéciaux
On peut échapper l'intégralité de la séquence concernée avec \Q...\E (avec ou sans la limite de mot \b mentionnée par rgx)

$var = "$TOTO"
; pattern :
'(?m)^.*?\b\Q' & $var & '\E\b.*$\R?'

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 17:05
par Boulanza
Bonjour Monsieur Tlem,
Vos remarques sont à leurs juste valeurs.
Mais, lorsque on a une suggestion : solution au problème, on est sensé à tester la solution avec toute les 4 figures... pour que le code soit parfait c.a.r. que la solution ne soit pas aléatoire.
Cordialement.

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 17:29
par Boulanza
Pour mikell
Juste une petite modification pour que ça marche correctement avec $:(?m)^.\$*?\...
resultat =StringRegExpReplace($file,'(?m)^.\$*?\b\Q' & $var & '\E\b.*$\R?', "", "")
Cordialement.

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 17:37
par Tlem
D’où mon message !!!

Si je suis intervenu, c'est bien parce que vous avez lourdement insisté sur "Je dis bien, supprimer toute la ligne contenant le mot "TOTO""
Si vous donnez toutes les contraintes liées à votre demande dés le départ, la réponse sera d'autant moins aléatoire.
Mais comme d'habitude, vos contraintes apparaissent au fil des messages, ce qui dénote un manque de réflexion avant de poser la question !!!

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 18:24
par Boulanza
Bonsoir Monsieur Tlem,
Tlem a écrit : dim. 07 mars 2021 17:37 D’où mon message !!!
..., ce qui dénote un manque de réflexion avant de poser la question !!!
C'est pour cette raison là que je prends chaque jour 14 gélules pour combattre le manque de réflexionssssss.
Je deviens vraiment vieux ... Je vous demande d'excuser ma mémoire qui me fait défaut.
Je compte sur votre compréhension.
Cordialement.

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : dim. 07 mars 2021 18:31
par Boulanza
mikell a écrit : dim. 07 mars 2021 16:43 Dernier détail pour les caractères spéciaux
On peut échapper l'intégralité de la séquence concernée avec \Q...\E (avec ou sans la limite de mot \b mentionnée par rgx)
$var = "$TOTO"
; pattern :
'(?m)^.*?\b\Q' & $var & '\E\b.*$\R?'
Non, même la petite modification que j'ai ajouté c'est du n'importe quoi !!! :oops: :oops:

Re: [..] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : lun. 08 mars 2021 14:39
par Boulanza
Bonjour,
$var = "$TOTO"
Pour que la solution de mikell marche sans problème "$TOTO" il suffi juste de supprimer le premier \b soit donc:
$resultat1 =StringRegExpReplace($file,'(?m)^.*?\Q' & $var1 & '\E\b.*$\R?', "", "")
Ceci marche aussi parfaitement sans souci.
$resultat1 = StringRegExpReplace($file, '(?m).*?((\V*\v+)?\V*\Q' & $var1 & '\E\V*(\v+\V*)?).*', "")
Cordialement.

Re: [R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : lun. 08 mars 2021 15:46
par rgx
Boulanza a écrit : lun. 08 mars 2021 14:39 Bonjour,
$var = "$TOTO"
Pour que la solution de mikell marche sans problème "$TOTO" il suffi juste de supprimer le premier \b soit donc:
$resultat1 =StringRegExpReplace($file,'(?m)^.*?\Q' & $var1 & '\E\b.*$\R?', "", "")
Ceci marche aussi parfaitement sans souci.
$resultat1 = StringRegExpReplace($file, '(?m).*?((\V*\v+)?\V*\Q' & $var1 & '\E\V*(\v+\V*)?).*', "")
Cordialement.
RegEx 1. Non, car cela va aussi ramasser un mot qui finit par $TOTO (ex: PAS$TOTO).
Il faut alors faire un "ou" 'commence par' ou 'milieu', style:

Code : Tout sélectionner

(^|[^\w])\$TOTO\b
(pas testé tous les cas possibles)
\b devant $ ne fonctionne pas car il n'est valable que si la lettre du "mot" à côté est une lettre, un chiffre ou un underscore

RegEx 2. Mais pourquoi utiliser un tabulateur vertical ?

Cela dit, si l'expression à trouver est un texte fixe ($TOTO) il est plus simple d'utiliser StringInStr...
- Tant que marqueur EOF du fichier source non trouvé
- Lire une ligne du fichier d'entrée
- Chercher si la chaine y est
- Si non, écrire la ligne dans le fichier de sortie
- Boucler

Re: [R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : lun. 08 mars 2021 18:51
par Boulanza
Boulanza a écrit : lun. 08 mars 2021 14:39 Bonjour,
$var = "$TOTO"
Pour que la solution de mikell marche sans problème "$TOTO" il suffi juste de supprimer le premier \b soit donc:
$resultat1 =StringRegExpReplace($file,'(?m)^.*?\Q' & $var1 & '\E\b.*$\R?', "", "")
Ceci marche aussi parfaitement sans souci.
$resultat1 = StringRegExpReplace($file, '(?m).*?((\V*\v+)?\V*\Q' & $var1 & '\E\V*(\v+\V*)?).*', "")
Cordialement.


RegEx 1. Non, car cela va aussi ramasser un mot qui finit par $TOTO (ex: PAS$TOTO).
Il faut alors faire un "ou" 'commence par' ou 'milieu', style:
(^|[^\w])\$TOTO\b(pas testé tous les cas possibles)
\b devant $ ne fonctionne pas car il n'est valable que si la lettre du "mot" à côté est une lettre, un chiffre ou un underscore

RegEx 2. Mais pourquoi utiliser un tabulateur vertical ?

Cela dit, si l'expression à trouver est un texte fixe ($TOTO) il est plus simple d'utiliser StringInStr...
- Tant que marqueur EOF du fichier source non trouvé
- Lire une ligne du fichier d'entrée
- Chercher si la chaine y est
- Si non, écrire la ligne dans le fichier de sortie
- Boucler

Re: [R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : lun. 08 mars 2021 19:53
par Boulanza
Bonjour rgx,
Effectivement, j'ai testé les deux solution:
$resultat1 =StringRegExpReplace($file,'(?m)^.*?\Q' & $var1 & '\E\b.*$\R?', "", "")
$resultat1 = StringRegExpReplace($file, '(?m).*?((\V*\v+)?\V*\Q' & $var1 & '\E\V*(\v+\V*)?).*', "")
Ramassent un mot qui finit par $TOTO (ex: PAS$TOTO).
Votre suggestion est obligatoire (^|[^\w])\$TOTO\b ne donne aucun effet de modification. Je vous prie de revoir votre suggétion pour que ça marche.
Cordialement

Re: [R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : mar. 09 mars 2021 09:37
par rgx
Bonjour,

Chez moi, ça fonctionne.

Pas de données de test (must match / must not match), pas de script complet, pas de réponse complète possible.

Re: [R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : mar. 09 mars 2021 16:00
par Boulanza
Bonjour,
Le script est très lourd : avec des image et des vidéos. Par contre svp placez votre solution dans:
StringRegExpReplace($file,(^|[^\w])\$TOTO\b, "", "")[/code2] pour comprendre mon erreur.
Cordialement.

Re: [R] Supprimer toute la ligne contenant un mot et ou une phrase déjà connu d'un fichier texte

Posté : mer. 10 mars 2021 21:02
par Boulanza
Pas de suite, pas de solution: "^|[^\w])\$TOTO\b" ne signifie rien, de rien...