Ajuda com Sort

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

RsTxSpyMaster
Posts: 8
Joined: 29 Sep 2018, 08:24

Ajuda com Sort

08 Jan 2019, 17:11

boa noite, tudo bem?
preciso retirar conteúdo duplicado utilizando sort porem tenho q ignorar a numeração que aparece antes da string

por exemplo tenho esse texto(existe uma tabulação no espaço, no fórum tirou)

39100 BsU9GS7hbjL/
11111 BsT0AmxgCPP/
12345 BsT0AmxgCPP/
12345 BsT0AmxgCPP/

ele retorna

39100 BsU9GS7hbjL/
11111 BsT0AmxgCPP/
12345 BsT0AmxgCPP/

quero que considere duplicado o BsT0AmxgCPP/ mas como os números que vem antes não é duplicado ele mantem os 2 resultados
eu quero que mantenha 1 resultado não importa qual numero que ele escolha para manter

eu tentei usar isso

Code: Select all

numpad1::
Sort, clipboard,UF StringSort   
msgbox, % clipboard
return

StringSort(a1, a2){
if(RegExReplace(a1,"^\d.*[\t]")==RegExReplace(a2,"^\d.*[\t]"))
return 1
}
porém nao entendi muito bem como uso o comando F do sort, sei q retorna -1,1,0 mas nao entendi bem
a documentação está aqui https://www.autohotkey.com/docs/commands/Sort.htm
se alguém poder dar um help
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com Sort

09 Jan 2019, 09:13

Bom dia RsTxSpyMaster,

A função indicada com a opção F do comando Sort é escrita pelo usuário e deve apenas retornar:

1 quando o primeiro parâmetro informado for maior que o segundo (em posição que deve ficar na lista). A segunda posição é maior que a primeira.
0, "" ou nada quando os dois parâmetros forem iguais (ou seja, quando eles devam ficar na mesma sequência de posições da lista sem importar a ordem entre eles)
-1 para qualquer outro caso

Perceba que com essas informações retornadas, o comando já entende como deve organizar qualquer lista possível: ele vai testando os itens de 2 em 2 até entender as posições que devem ficar baseado nas respostas de várias chamadas à função. Exemplo: para organizar a lista bola, abacate, cadeado de forma alfabética, ele pode testar:

bola na esquerda com abacate na direita: retorna 1
abacate na esquerda com cadeado na direita: retorna 0
bola na esquerda com cadeado na direita: retorna 0

isso já diz pro comando que a lista correta é abacate, bola, cadeado pois é a única possibilidade em que abacate < bola e também bola < cadeado.

:arrow: Sobre a sua pergunta, se você quiser remover todos os itens duplicados independente do número que venha antes, você deve usar outros comandos para tratamento de strings, pois o Sort apenas organiza a lista podendo remover itens totalmente duplicados (mas não itens parcialmente duplicados).

Code: Select all

var1 =
(
39100 BsU9GS7hbjL/
11111 BsT0AmxgCPP/
12345 BsT0AmxgCPP/
12345 BsT0AmxgCPP/
09945 BsT0AmxgCPP/
)

LISTA_FINAL := ""
StringSplit, LISTA_, Var1, `n
Loop % LISTA_0
{
	ITEM_ATUAL := LISTA_%A_Index%
	ITEM_ATUAL_SEM_DIGITOS := RegExReplace(ITEM_ATUAL,"\d+?\s")
	IfNotInString, LISTA_FINAL, %ITEM_ATUAL_SEM_DIGITOS%
	{
		LISTA_FINAL := LISTA_FINAL . ITEM_ATUAL . "`n"
	}
}
msgbox % LISTA_FINAL
RsTxSpyMaster
Posts: 8
Joined: 29 Sep 2018, 08:24

Re: Ajuda com Sort

09 Jan 2019, 10:31

Obrigado, agora entendi a opção F
pensei que dava para resolver duplicação parcial com sort mas essa alternativa serve já implementei no meu código tá bem enxuto
esse truque LISTA_0,LISTA_1,LISTA_2... eu nao sabia bem útil

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 23 guests