mIRC Homepage
Posted By: TECO duplicate data in a var - 15/12/18 02:28 PM
Hi
I have a %var as follows:

PTirc PTirc PTirc PTirc PTnet PTnet PTnet PTnet PTnet PTnet PTnet

I no longer remember how I can filter this and make the var return only one word:

Example: PTirc PTnet

Does anyone know how to do it?
Posted By: Wims Re: duplicate data in a var - 15/12/18 02:41 PM
use $addtok to add to the variable

//echo -a $addtok(test,test,32)
Posted By: TECO Re: duplicate data in a var - 15/12/18 02:46 PM
Originally Posted By: Wims
use $addtok to add to the variable

//echo -a $addtok(test,test,32)

This is not for what I need
Posted By: Wims Re: duplicate data in a var - 15/12/18 02:56 PM
How are you getting that variable with such a value?

You can use $regsubex(PTirc PTirc PTirc PTirc PTnet PTnet PTnet PTnet PTnet PTnet PTnet,/(\w+)(?=.*\b\1\b) */,)
Posted By: TECO Re: duplicate data in a var - 15/12/18 07:40 PM
Originally Posted By: Wims
How are you getting that variable with such a value?

You can use $regsubex(PTirc PTirc PTirc PTirc PTnet PTnet PTnet PTnet PTnet PTnet PTnet,/(\w+)(?=.*\b\1\b) */,)

Yes, I am getting this value in a variable, but I intend to remove all repeated words and that the final result is, it gets one of each.

Example. Final result: PTirc PTnet
Posted By: maroon Re: duplicate data in a var - 16/12/18 05:59 AM

Thanks to Raccoon for these aliases. Obviously 32 is the codepoint for the space delimiter.

If you're not concerned with the order in which the tokens appear, you can just do:

//var %a ab cd ef gh ij ab ab ef | echo -a $dedupetok(%a,32)

which returns: cd gh ij ab ef
... which is the order after deleting the leftmost dupes. If you want to make it get rid of the rightmost dupes, you have to flip the word order, then kill the leftmost dupes, then flip it again:

//var %a ab cd ef gh ij ab ab ef | echo -a $revtok($dedupetok($revtok(%a,32),32),32)

returns: ab cd ef gh ij

Code:
alias revtok { var %a = $1, %b = $2 | return $regsubex(_revtok,%a,/[^ $+ $chr(%b) $+ ]+/g,$gettok(%a,-\n,%b)) } ; by Raccoon 2017
alias dedupetok { return $regsubex(_dedupetok,$1,$replace(/(?<=^|x)x*+(?:([^x]++)x++(?=(?:.*?x)??\1(?:x|$)))?|x+$/g,x,\Q $+ $chr($$2) $+ \E),) } ; by Raccoon Ouims Saturn 2017

Posted By: TECO Re: duplicate data in a var - 16/12/18 07:52 PM
Originally Posted By: maroon

Thanks to Raccoon for these aliases. Obviously 32 is the codepoint for the space delimiter.

If you're not concerned with the order in which the tokens appear, you can just do:

//var %a ab cd ef gh ij ab ab ef | echo -a $dedupetok(%a,32)

which returns: cd gh ij ab ef
... which is the order after deleting the leftmost dupes. If you want to make it get rid of the rightmost dupes, you have to flip the word order, then kill the leftmost dupes, then flip it again:

//var %a ab cd ef gh ij ab ab ef | echo -a $revtok($dedupetok($revtok(%a,32),32),32)

returns: ab cd ef gh ij

Code:
alias revtok { var %a = $1, %b = $2 | return $regsubex(_revtok,%a,/[^ $+ $chr(%b) $+ ]+/g,$gettok(%a,-\n,%b)) } ; by Raccoon 2017
alias dedupetok { return $regsubex(_dedupetok,$1,$replace(/(?<=^|x)x*+(?:([^x]++)x++(?=(?:.*?x)??\1(?:x|$)))?|x+$/g,x,\Q $+ $chr($$2) $+ \E),) } ; by Raccoon Ouims Saturn 2017




Thank you Raccoon wink
Thank you maroon wink
Posted By: Raccoon Re: duplicate data in a var - 16/12/18 10:56 PM
Thanks for doing the leg work posting smile Ouims and Saturn helped produce those functions. I bet jaytea too.
© mIRC Discussion Forums