Jump to content
  • 0

Fonction perso - Supprimer lignes qui contiennent un mot


Go to solution Solved by Jérémie Gimenez,

Question

Bonjour à tous,

J'utilise cette fonction personnalisée afin de supprimer, au sein d'une liste, la ou les lignes entières qui contiennent le mot donné en paramètre :
https://www.briandunning.com/cf/2231

J'aimerais l'adapter afin d'avoir non pas un RedFlag, mais deux RedFlag...

J'ai réussi à me débrouiller en attendant de trouver mieux non pas au niveau de la fonction perso, mais au niveau de la rubrique de calcul, en lançant la fonction perso une deuxième fois dans elle-même :

// Original :
RemoveLinesContaining ( Maliste ; "Mot_1" )

// Bidouillage :
RemoveLinesContaining ( 
  RemoveLinesContaining ( MaListe ; "Mot_1" ) ; 
    "Mot_2" 
)

Ce que je viens de faire, c'est un semblant de récursivité non ? (J'ai toujours un peu de mal à mettre en pratique ce concept encore aujourd'hui ^^)

En tout cas, ça à l'air de très bien fonctionner, mais je ne trouve pas ça très propre... Avez-vous une piste à me donner pour modifier la fonction originale afin qu'elle puisse accepter deux RedFlag, et ainsi supprimer toutes les lignes d'une liste qui contiennent l'un, l'autre, ou les deux RedFlag ? Je n'ai pas réussi de mon côté 😐

Merci d'avance pour votre précieuse aide !

Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0
  • Solution

Hello,

definir (
[
a = "ligne 1¶ligne 2 à supprimer¶ligne 3¶ligne 4 à virer"
; b = "suppr"
; c = "virer"
] ;

FilterValues (
	a
	; Substitute (
		a
		; [ b ; "" ]
		; [ c ; "" ]
		)

	)

)

renvoie :

ligne 1

ligne 3

Ca le fait pour toi ?

Jérémie

Link to post
Share on other sites
  • 0

Salut Jérémie,

Merci pour ton aide (encore une fois 😉) ça le fait carrément !

Dans cette partie du code :

Substitute (
		a
		; [ b ; "" ]
		; [ c ; "" ]
		)

	)

Les paramètres de la fonction Substituer entre crochets correspondent à des listes (si j'ai bien compris), je n'avais absolument pas pensé à les utiliser dans cette fonction, c'est malin 😊

J'ai du coup créé une nouvelle fonction personnalisée avec ton calcul, c'est nickel, merci beaucoup 🙏

Link to post
Share on other sites
  • 0
Il y a 6 heures, Loraga a dit :

je n'avais absolument pas pensé à les utiliser dans cette fonction

En effet, avant que quelqu'un nous le dise, personne ne sait comment "enchâsser" les Substituer. Il n'y a pas de document là-dessus.

C'est ce qui remplace :

Substituer ( Substituer ( Substituer ( … ( … ( … ) ) )

Il y a 5 heures, fabriceN a dit :

cette fonction (de @Jérémie Gimenez) est sensible à la casse

Bonne remarque ! Cependant, c'est directement la fonction 2231 de Brian, à qui je me dois de faire suivre aussi bien les lauriers que les fléchettes…   😉

Je n'ai ajouté que l'enchâssement des substitutions.

Je me suis aussi posé la question de la casse, mais je n'y vois pas de solution, en restant dans la même logique

Link to post
Share on other sites
  • 0

Ou sinon un simple While :

 

TantQue ([ motInterdit = "Mot_1" ; liste = $laliste ; i=0 ; c= decomptevaleurs ( liste ) ; v = "" ; r = "" ] ; i < c ; [ i=i+1 ; v = ObtenirValeur ( liste ; i ) ; r = Liste ( r ; Cas ( not Occurrences ( v ; motInterdit ) ; v )] ; r )

(non testé)

Link to post
Share on other sites
  • 0

Bien vu !

Je n'ai pas l'âme (et probablement pas la capacité) à explorer la fonction d'Agnès, mais en effet, dans ton While, tu joues sur Occurrences, qui enlève la sensibilité à la casse.

Du coup, @Loraga, si tu as besoin que ton nettoyage se fasse sans tenir compte de la casse, il te faudra mettre dans une fonction perso ce code de @fabriceN :

TantQue (
[
motInterdit = "virer"
; laListe = "ligne à garder 1¶ligne à VIRER 1¶ligne à garder 2¶ligne à ViReR 2"
; i = 0
; c = decomptevaleurs ( laListe )
; v = ""
; r = ""
]

; i < c

;
[
i = i + 1
; v = ObtenirValeur ( laListe ; i )
; r = Liste ( r ; Cas ( not Occurrences ( v ; motInterdit ) ; v ) )
]

; r

)

NB : au test, j'ai dû seulement ajouter l'article "la" dans "laListe" car sinon, avec un FMP installé en français, on avait conflit entre la variable locale liste et la fonction Liste. C'est tout

Bon mercredi,

Jérémie

Link to post
Share on other sites
  • 0

Merci à tous les deux pour vos explications et votre aide 😊

Dans mon cas, une fonction sensible à la casse ne me dérange pas car je filtre deux valeurs générées dynamiquement et strictement identiques (donc pas d'erreur possible). A vrai dire, je ne m'étais même pas rendu compte que la fonction de Jérémie était sensible à la casse 😂

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...