none
Ajuda com coleção RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho que ler uma string com o formato deste exemplo: "&cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethânia&tipo_logradouro=Avenida".

    Preciso separar os trechos entre "&" e criar uma coleção, depois ler chave e valor.

    Fiz assim:

    Dim retorno As String = "&cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethânia&tipo_logradouro=Avenida".
    
    
    
    Dim lista As String() = retorno.Split("&")
    
    
    
    Dim resultado As String = ""
    
    
    
    Dim i As Integer
    
    
    
    For i = 0 To UBound(lista)
    
    
    
    resultado += lista(i) + "<br>"
    
    
    
    Next
    
    
    
    

    O resultado fica:

    cep=35164069
    uf=MG
    cidade=Ipatinga
    bairro=Bethânia
    tipo_logradouro=Avenida

    Mas preciso de alguma forma identificar chave/valor, pois tenho que fazer algumas verificações para determinadas chaves.

    Ex: If chave = "bairro" then...

    Como posso resolver?
    Obrigada!

     

     

    sexta-feira, 23 de outubro de 2009 14:25

Respostas

  • Olá Vivi!

    Já que isso são parametros de uma QueryString, o Request.QueryString funcionará perfeitamente.

    Mas se você quiser ter um controle maior dos parametros, que é o que eu acho que você quer, pode fazer assim:

            Dim retorno As String = "cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethânia&tipo_logradouro=Avenida"
           
            Dim lista As String() = retorno.Split("&")
    
            Dim resultado As String = ""
            Dim par As String() = Nothing
    
    
            Dim Params As Dictionary(Of [String], [String])() = New Dictionary(Of [String], [String])(4) {}
            Dim Param As New Dictionary(Of [String], [String])()
    
            For Each parametros As String In lista
                par = parametros.Split("="c)
    
                Param.Add(par(0), par(1))
            Next
    
            For Each key As KeyValuePair(Of String, String) In Param
                resultado += (key.Key & " = ") + key.Value
            Next
    
            Response.Write(resultado)
    

    Espero ter ajudado.   =)

    Não esqueça de marcar a resposta como útil!
    --
    Learn! Think! Produce!
    Leandro Mello
    • Marcado como Resposta _Vivi_ sexta-feira, 23 de outubro de 2009 18:40
    sexta-feira, 23 de outubro de 2009 16:53

Todas as Respostas

  • Olá Vivi!

    Você pode fazer outro split dentro do seu FOR. O caracter que separará essa nova string será o '='.

    Se precisar, você pode criar uma coleção de Dictionary para colocar essas "chaves", assim poderá usar em outra parte do código.

    Abs

    Não esqueça de marcar a resposta como útil!
    --
    Learn! Think! Produce!
    Leandro Mello
    sexta-feira, 23 de outubro de 2009 14:38
  • Olá Leandro,

    Vc teria um exemplo? Estou com dificuldades, tentei de várias formas e não deu certo.

    Obrigada!
    sexta-feira, 23 de outubro de 2009 16:04
  • Poque você não usa o Request.Querystring("CEP")?


    Espero ter ajudado. Caso consiga solucionar o problema em função desta resposta, peço por favor, clicar em “Marcar como Resposta” para que outras pessoas também possam usufruir deste conteúdo.

    Abraço.
    Daniel Garcia
    MCP, MCTS, MCDP, MCT
    Meu blog: www.danielgarcia.com.br

    sexta-feira, 23 de outubro de 2009 16:10
  • Olá Daniel,

    Não dá pra usar Request.QueryString("cep") pq existem vários parâmetros a resgatar além do cep. Estou fazendo assim:

    Dim link As String = "http://www.busca.com.br/?cep=" + txtCep + "&formato=string"
    Dim web As New Net.WebClient()
    Dim
    retorno As String = web.DownloadString(link)
    Dim lista As String() = retorno.Split("&")

    A variável link vem mais ou menos assim, além de mais informações: "&cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethânia&tipo_logradouro=Avenida"

    Depois preciso separar a lista recebida por "&", fica assim:

    cep=35164069
    uf=MG
    cidade=Ipatinga
    bairro=Bethânia
    tipo_logradouro=Avenida

    Então pensei em criar uma coleção chave/valor para manipular os dados, por exemplo:

    chave: cep / valor: 35164069
    chave: uf / valor: MG
    chave: cidade / valor: Ipatinga


    Mas não estou conseguindo fazer...

    Obrigada!
    sexta-feira, 23 de outubro de 2009 16:22
  • Oi Vivi,

    A partir do framework 2.0, é mais simples usar "HttpUtility.ParseQueryString", do Namespace System.Web, que já te entrega "prontinho" uma NameValueCollection com as chaves e respectivos valores da sua QueryString:

    Assim:

    NameValueCollection nvc = HttpUtility.ParseQueryString("&cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethânia&tipo_logradouro=Avenida");

    Aí você consegue ler as chaves e seus valores numa boa:

    foreach (String chave in values.AllKeys)
    {
       Console.WriteLine( "Chave: {0} / Valor {1}", chave, nvc[chave] );
       Console.WriteLine();
    }

    Forte abraço,

    André Borges Medeiros
    MCPD, MCT

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    sexta-feira, 23 de outubro de 2009 16:38
  • Olá Vivi!

    Já que isso são parametros de uma QueryString, o Request.QueryString funcionará perfeitamente.

    Mas se você quiser ter um controle maior dos parametros, que é o que eu acho que você quer, pode fazer assim:

            Dim retorno As String = "cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethânia&tipo_logradouro=Avenida"
           
            Dim lista As String() = retorno.Split("&")
    
            Dim resultado As String = ""
            Dim par As String() = Nothing
    
    
            Dim Params As Dictionary(Of [String], [String])() = New Dictionary(Of [String], [String])(4) {}
            Dim Param As New Dictionary(Of [String], [String])()
    
            For Each parametros As String In lista
                par = parametros.Split("="c)
    
                Param.Add(par(0), par(1))
            Next
    
            For Each key As KeyValuePair(Of String, String) In Param
                resultado += (key.Key & " = ") + key.Value
            Next
    
            Response.Write(resultado)
    

    Espero ter ajudado.   =)

    Não esqueça de marcar a resposta como útil!
    --
    Learn! Think! Produce!
    Leandro Mello
    • Marcado como Resposta _Vivi_ sexta-feira, 23 de outubro de 2009 18:40
    sexta-feira, 23 de outubro de 2009 16:53
  • Olá Andre,

    Converti para vb.net e ficou assim:

     

    Dim nvc As NameValueCollection = HttpUtility.ParseQueryString("&cep=35164069&uf=MG&cidade=Ipatinga&bairro=Bethnia&tipo_logradouro=Avenida")

     

    For Each chave As [String] In values.AllKeys
    Console.WriteLine(
    "Chave: {0} / Valor {1}", chave, nvc(chave))
    Console.WriteLine()
    Next


    Mas em "values.AllKeys" dá a msg que "values" não está declarado. Vc sabe o que pode estar errado?

    Obrigada!
    sexta-feira, 23 de outubro de 2009 17:06
  • Olá Leandro,

    Agora funcionou, muito obrigada!!
    sexta-feira, 23 de outubro de 2009 18:39