Pessoal, segue o probleminha para aquecer o feriado de vcs (só o de vcs, pq eu tô trabalhando né
…)
Eu tenho 3 vetores, um deles com 40 elementos (meio que agrupados 5-a-5) e os outros com NO MÁXIMO 8, isso porque eles são criados a partir de 2 itens de cada grupo de 5 do vetor de 40.
Apenas para exemplificar eu darei nomes aos bois:
Vetor de 40:
TagsRSLinx(0) = AUX_FLAG_TROCA_TURNO
TagsRSLinx(1) = CODMAT_PD1
TagsRSLinx(2) = QUANT_ATUAL_PD1
TagsRSLinx(3) = TOTAL_PD1
TagsRSLinx(4) = UMIDADE_PD1
TagsRSLinx(5) = CODMAT_PD2
TagsRSLinx(6) = QUANT_ATUAL_PD2
TagsRSLinx(7) = TOTAL_PD2
TagsRSLinx(8) = UMIDADE_PD2
TagsRSLinx(9) = CODMAT_PD3
TagsRSLinx(10) = QUANT_ATUAL_PD3
TagsRSLinx(11) = TOTAL_PD3
TagsRSLinx(12) = UMIDADE_PD3
TagsRSLinx(13) = CODMAT_PD4
TagsRSLinx(14) = QUANT_ATUAL_PD4
TagsRSLinx(15) = TOTAL_PD4
TagsRSLinx(16) = UMIDADE_PD4
TagsRSLinx(17) = CODMAT_PD5
TagsRSLinx(18) = QUANT_ATUAL_PD5
TagsRSLinx(19) = TOTAL_PD5
TagsRSLinx(20) = UMIDADE_PD5
TagsRSLinx(21) = CODMAT_PD6
TagsRSLinx(22) = QUANT_ATUAL_PD6
TagsRSLinx(23) = TOTAL_PD6
TagsRSLinx(24) = UMIDADE_PD6
TagsRSLinx(25) = CODMAT_PD7
TagsRSLinx(26) = QUANT_ATUAL_PD7
TagsRSLinx(27) = TOTAL_PD7
TagsRSLinx(28) = UMIDADE_PD7
TagsRSLinx(29) = CODMAT_PD8
TagsRSLinx(30) = QUANT_ATUAL_PD8
TagsRSLinx(31) = TOTAL_PD8
TagsRSLinx(32) = UMIDADE_PD8
TagsRSLinx(33) = QUANT_PROGR_PD1
TagsRSLinx(34) = QUANT_PROGR_PD2
TagsRSLinx(35) = QUANT_PROGR_PD3
TagsRSLinx(36) = QUANT_PROGR_PD4
TagsRSLinx(37) = QUANT_PROGR_PD5
TagsRSLinx(38) = QUANT_PROGR_PD6
TagsRSLinx(39) = QUANT_PROGR_PD7
TagsRSLinx(40) = QUANT_PROGR_PD8
Os outros dois vetores são
Dim materiais() As String 'Guarda os tipos de materiais nos PD
Dim quantidadeMaterial() As Single 'Guarda a quantidade para cada material
Ou seja, eles podem ter de 1-8 elementos, dependendo dos elementos 1(i5) e 2 (i5+1) do vetorzão, se são repetidos ou não.
Para encher os dois menores eu faço:
For i = 1 To 8
'Primeira passagem, obrigatoriamente o material é novo na lista
If i = 1 Then
materiais(i) = (ValorTagsRSLinx(IndiceTag(TagsRSLinx, CODMAT_PD1) + 1))
quantidadeMaterial(i) = CSng((ValorTagsRSLinx(IndiceTag(TagsRSLinx, QUANT_ATUAL_PD1) + 1)).ToString("000.00").Replace(".", ","))
j = 5
Else
'Testa se tem um material com o mesmo nome no vetor
aux = IndiceTag(materiais, (ValorTagsRSLinx(IndiceTag(TagsRSLinx, j + 1))))
If aux = -1 Then
'Adiciona novo material e quantidade
materiais(i) = CInt(ValorTagsRSLinx(j + 1)).ToString("00000")
quantidadeMaterial(i) = CSng((ValorTagsRSLinx(j + 1)).ToString("000.00").Replace(".", ","))
Else
'Aumenta a quantidade do material selecionado
quantidadeMaterial(aux + 1) += CSng((ValorTagsRSLinx(j + 1)).ToString("000.00").Replace(".", ","))
End If
j += 4
End If
Next
E a função IndiceTag só faz um Array.IndexOf(Vetor(), Object). Mas depois, eu tenho que atualizar os valores do vetor de 40 de acordo com uns cálculos, então, se eu tiver 3 materiais iguais, eu tenho que receber 3 Index nessa chamada:
'Calcula o percentual de cada material no vetor materiais()
j = 2
For i = 1 To materiais.GetLength(0)
ValorTagsRSLinx(IndiceTag(TagsRSLinx, materiais(i)) + 1) = quantidadeMaterial(i) / totalQuantidade
Next
Como estou meio bloqueado das idéias hoje e acho que tem alguns outros azarados como eu que estão trabalhando e vão entrar no GUJ, eu estou postando a dúvida.
Ajuda é sempre bem vinda!
Se não deu pra entender, diga o que está nebuloso que eu esclareço!!!