Jump to content


Photo

[Resolvido] Array Dinâmico


  • Faça o login para participar
2 replies to this topic

#1 theand

theand

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino

Posted 21/12/2009, 12:51

Galera já pesquisei na web mas não consegui o que queria, preciso de ajuda no seguinte,

na tabela
Posted Image
onde gostaria de criar um vetor agrupando somente valores "PAR" ou seja

Jul/09 = 54
Ago/09 = 53
Set/09 = 53
Out/09 = 51
Nov/09 = 46
Dez/09 = 33

Tentei o seguinte :
set rs = conn2.execute(sql)
p=rs.getrows()
conn2.close

x = ubound(p,2)
dim valor(), provedor()
for i = 0 to x
	if p(2,i) = "PAR" then
		redim preserve valor(i)
		redim preserve provedor(i)
		valor(i) = p(3,i)
		provedor(i) = p(2,i)
	end if
next

o resultado mostrado
Posted Image

Ele está inserindo valores nulos quando o provedor é diferente de "PAR", como faço pra resolver isso, pegar apenas os valores de cada provedor ?

Edição feita por: Renan L. Queiroz, 05/01/2010, 15:14.


#2 Renan L. Queiroz

Renan L. Queiroz

    Mestre

  • Usuários
  • 690 posts
  • Sexo:Masculino
  • Localidade:Brasilia - DF

Posted 23/12/2009, 17:07

Acreito que alterando a variável passada para o redim (atualmente i) possa ajudar!
Pois pensei da seguinte maneira:
Você está fazendo um loop com por exemplo 10 registros onde
i anda de 1 a 10 sendo que as arrays valor e provedor são
redimensionadas de acordo com i sendo que mesmo que não entre no
IF (valor diferente de PAR) o i segue sendo acrescentado o valor
+1 ao mesmo, sendo assim mesmo que ele pule o registro de i = 6 ao
validar o IF (PAR) sendo igual a 7 ele redimensiona a array para uma
de 7 posições deixando a posição numero 6 vazia.

Tente criar uma variável para que só seja acrescentada uma posição caso
obedeça a condição do IF (PAR), exemplo:
Set rs = conn2.execute(sql)
p=rs.getrows()
conn2.close

x = ubound(p,2)
Dim valor(), provedor() 
Dim redimAux : redimAux = 1

For i = 0 To x
    If p(2,i) = "PAR" Then
        redimAux = redimAux + 1
        ReDim preserve valor(redimAux)
        ReDim preserve provedor(redimAux)
        valor(i) = p(3,i)
        provedor(i) = p(2,i)
    End If
Next
Não executei o mesmo para teste, então aguardo feedback, para correções o/ou esclarecimentos!! ;-)

Edição feita por: Renan L. Queiroz, 24/12/2009, 08:27.

Especialidade: Desenvolvimento e Banco de Dados.


Este post lhe ajudou? Agradeça: Posted Image


#3 theand

theand

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino

Posted 28/12/2009, 09:28

Vlw's Renan, ajudou bastante o conceito de redimAux, assim pude fazer o seguinte :

Set rs = conn2.execute(sql)
p=rs.getrows()
conn2.close

x = ubound(p,2)
Dim arr_gov(), arr_con(), arr_par()
Dim redimgov : redimgov = 0
Dim redimcon : redimcon = 0
Dim redimpar : redimpar = 0

For i = 0 To x
    If p(2,i) = "GOV" Then
        ReDim preserve arr_gov(redimgov)
        arr_gov(redimgov) = p(3,i)
        redimgov = redimgov + 1
    ElseIf p(2,i) = "CON" Then
        ReDim preserve arr_con(redimcon)
        arr_con(redimcon) = p(3,i)
        redimcon = redimcon + 1
    Else
        ReDim preserve arr_par(redimcon)
        arr_par(redimpar) = p(3,i)
        redimpar = redimpar + 1
    End If
Next

for i = 0 to 5
    response.Write("<br>Posição "&i&" do SUS - O valor é : "&arr_gov(i))
next
for i = 0 to 5
    response.Write("<br>Posição "&i&" do Convênio - O valor é : "&arr_con(i))
next
for i = 0 to 5
    response.Write("<br>Posição "&i&" do Particular - O valor é : "&arr_par(i))
next

Retornando o desejado agora
Posição 0 do SUS - O valor é : 8
Posição 1 do SUS - O valor é : 5
Posição 2 do SUS - O valor é : 6
Posição 3 do SUS - O valor é : 7
Posição 4 do SUS - O valor é : 3
Posição 5 do SUS - O valor é : 2
Posição 0 do Convênio - O valor é : 239
Posição 1 do Convênio - O valor é : 211
Posição 2 do Convênio - O valor é : 191
Posição 3 do Convênio - O valor é : 180
Posição 4 do Convênio - O valor é : 173
Posição 5 do Convênio - O valor é : 131
Posição 0 do Particular - O valor é : 54
Posição 1 do Particular - O valor é : 53
Posição 2 do Particular - O valor é : 53
Posição 3 do Particular - O valor é : 51
Posição 4 do Particular - O valor é : 46
Posição 5 do Particular - O valor é : 41

Tentarei agora colocá-los como array bidimensional, assim poderei passar o valor e o período de referência.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq