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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Boulanza le lun. 08 mars 2021 14:43, modifié 1 fois.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6121
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message par mikell »

Voilà
Pour ne pas supprimer en même temps le retour à la ligne, enlever le "\R?"
$resultat =StringRegExpReplace($file,'(?m)^.*?TOTO.*$\R?', "", "")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#3

Message 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.
rgx
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#4

Message 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:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11676
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#5

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6121
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#6

Message 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?'
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#7

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#8

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11676
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#9

Message 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 !!!
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#10

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#11

Message 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:
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#12

Message 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.
rgx
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#13

Message 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
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#14

Message 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
Modifié en dernier par Boulanza le lun. 08 mars 2021 20:07, modifié 1 fois.
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#15

Message 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
rgx
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#16

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#17

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 670
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#18

Message par Boulanza »

Pas de suite, pas de solution: "^|[^\w])\$TOTO\b" ne signifie rien, de rien...
Répondre