Page 1 of 1

Somar variaveis Iguais

Posted: 18 Aug 2022, 11:41
by thalesduarte
Olá, boa Tarde.

Como faço para somar VARIAS variaveis iguais?

Estou com um script que está gerando Nomes e textos, por exemplo.


Gerando os seguintes dados.

Thales, 25
Ricardo, 12
Thales, 12
Ricardo, 27
Giovani, 12
Giovani, 62

Tendo em vista que o código gera diversos nomes.

Cerca de 500 pessoas.
Como posso fazer isso de forma automáticaw

Como posso fazer para somar os valores com os nomes iguais.

Por Exemplo:

Resultado Total de:
Thales = 37
Ricardo = 39
Giovani = 74

Não consegui ainda achar uma forma de escrever isso no AHK.

Poderiam me dar um help nessa situação?


Seria semelhante a formula SOMASES() DO EXCEL

Grato!

Re: Somar variaveis Iguais

Posted: 18 Aug 2022, 12:13
by flyingDman
Bom dia. O que dizer disso?

Code: Select all

var =
(
Thales, 25
Ricardo, 12
Thales, 12
Ricardo, 27
Giovani, 12
Giovani, 62
)
arr := {}
for x,y in strsplit(var,"`n")
	{
	nm := strsplit(y,", ").1, cnt := strsplit(y,", ").2
	arr[nm] := !arr.HasKey(nm) ? cnt : arr[nm] + cnt
	}

for k,l in arr
	lst .= k "`t" l "`n"

msgbox % lst
Você também pode recuperar o total para cada nome individual da seguinte maneira:

Code: Select all

msgbox % arr["thales"]

Re: Somar variaveis Iguais

Posted: 18 Aug 2022, 12:42
by thalesduarte
Olá, muito obrigado pelo retorno!!
Sim, é parecido com isso.

Só que também precisaria para números.
Por Exemplo
Para somar contando com CPFS

Code: Select all

var =
(
66495756070, 25
00966776003, 12
66495756070, 12
00966776003, 27
66495756070, 12
00966776003, 62
)
arr := {}
for x,y in strsplit(var,"`n")
	{
	nm := strsplit(y,", ").1, cnt := strsplit(y,", ").2
	arr[nm] := !arr.HasKey(nm) ? cnt : arr[nm] + cnt
	}

for k,l in arr
	lst .= k "`t" l "`n"

msgbox % k
Como eu poderia fazer isso?

Re: Somar variaveis Iguais  Topic is solved

Posted: 18 Aug 2022, 12:44
by flyingDman
Da mesma forma:

Code: Select all

var =
(
66495756070, 25
00966776003, 12
66495756070, 12
00966776003, 27
66495756070, 12
00966776003, 62
)
arr := {}
for x,y in strsplit(var,"`n")
	{
	tmp := strsplit(y,", "), nm := tmp.1, cnt := tmp.2
	arr[nm] := !arr.HasKey(nm) ? cnt : arr[nm] + cnt
	}

for k,l in arr
	lst .= k "`t" l "`n"

msgbox % lst
msgbox % arr[66495756070]

Re: Somar variaveis Iguais

Posted: 18 Aug 2022, 12:48
by thalesduarte
flyingDman wrote:
18 Aug 2022, 12:44
Da mesma forma:

Code: Select all

var =
(
66495756070, 25
00966776003, 12
66495756070, 12
00966776003, 27
66495756070, 12
00966776003, 62
)
arr := {}
for x,y in strsplit(var,"`n")
	{
	tmp := strsplit(y,", "), nm := tmp.1, cnt := tmp.2
	arr[nm] := !arr.HasKey(nm) ? cnt : arr[nm] + cnt
	}

for k,l in arr
	lst .= k "`t" l "`n"

msgbox % lst
msgbox % arr[66495756070]
Muito Obrigado!!
Não entendi muito bem como foi a montagem do código, mas vou utilizar esse código como base para estudos.
Grato pela atenção!
Desejo um ótimo dia! =)

Re: Somar variaveis Iguais

Posted: 19 Aug 2022, 12:04
by thalesduarte
Amigo, boa tarde.

Se eu quiser colocar um terceiro parametro, como posso fazer o for retornar isso?

Code: Select all

var =
(
66495756070, 25, BRAZIL
00966776003, 12, ESTADOS UNIDOS
66495756070, 12, JAPAO
00966776003, 27, BRAZIL
66495756070, 12, ESTADOS UNIDOS
00966776003, 62, JAPAO
)
arr := {}
for x,y in strsplit(var,"`n")
	{
	tmp := strsplit(y,", "), nm := tmp.1, cnt := tmp.2
	arr[nm] := !arr.HasKey(nm) ? cnt : arr[nm] + cnt
	}

for k,l in arr
	lst .= k "`t" l "`n"

msgbox % lst
msgbox % arr[66495756070]
Como posso retornar a cidade? junto com o CPF, total e a cidade? (Sempre será 1 cidade por CPF, não será mais de uma)

Re: Somar variaveis Iguais

Posted: 19 Aug 2022, 12:22
by flyingDman
Eu não entendi. Eu só vejo nomes de países, não cidades. Você diz que há uma cidade por CFP, mas o CFP que termina em 03 tem ESTADOS UNIDOS, BRASIL e JAPAO associados a ele. Seria mais fácil se você mostrasse o resultado desejado.

Re: Somar variaveis Iguais

Posted: 19 Aug 2022, 12:47
by thalesduarte
Acho que me expressei mal.
Peço desculpas.

Então, estou realizando uma aplicação no qual a ferramenta vai ler UM arquivo txt na nuvem e vai dizer os Totais pontuados de cada funcionário.

A parte da leitura do banco de dados eu consegui fazer tranquilamente.
A parte onde travei foi a respeito de poder listar esses campos.

Tentei no for fazer um tmp.3, mas não consegui reproduzir ele no arr.

Segue Código.

Code: Select all

var =
(
00966776003, 12, BRAZIL
00966776003, 27, BRAZIL
00966776003, 62, BRAZIL
66495756070, 25, ESTADOS UNIDOS
66495756070, 12, ESTADOS UNIDOS
66495756070, 12, ESTADOS UNIDOS
09598848401, 25, JAPÃO
09598848401, 12, JAPÃO
09598848401, 33, JAPÃO

)
arr := {}
for x,y in strsplit(var,"`n")
	{
	tmp := strsplit(y,", "), nm := tmp.1, cnt := tmp.2
	arr[nm] := !arr.HasKey(nm) ? cnt : arr[nm] + cnt
	}

for k,l in arr
	lst .= k "`t" l "`n"

msgbox Os funcionários que mais pontuaram foram:`nCPF / PONTUAÇÃO / PAÍS`n%lst%


flyingDman wrote:
19 Aug 2022, 12:22
Eu não entendi. Eu só vejo nomes de países, não cidades. Você diz que há uma cidade por CFP, mas o CFP que termina em 03 tem ESTADOS UNIDOS, BRASIL e JAPAO associados a ele. Seria mais fácil se você mostrasse o resultado desejado.