Pergunta

Eu quero ler uma string que se parece exatamente com o seguinte:

VPSProtocol=2.22
Status=OK
StatusDetail=0000 : The Authorisation was Successful.
VPSTxId={BBF09A43-913E-14E3-B41B-E5464B6FF8A9}
SecurityKey=EH8VFZUSH9
TxAuthNo=4979698
AVSCV2=SECURITY CODE MATCH ONLY
AddressResult=NOTMATCHED
PostCodeResult=NOTMATCHED
CV2Result=MATCHED
CAVV=AAABARR5kwAAAAAAAAAAAAAAAAA=
3DSecureStatus=OK

... em um dicionário de preferência. Eu tentei dividir o vbcrlf (há uma em todas as linhas que posso garantir) e no '=', mas não consigo se comportar corretamente, muitas vezes saindo dos erros dos limites. Alguém tem algumas idéias fantásticas sobre como resolver isso?

Ajuda, como sempre, apreciado.

Foi útil?

Solução

Você poderia usar um StringReader:

Dim dic = New Dictionary(Of String, String)
Using reader = New StringReader(someString)
    Dim line As String = reader.ReadLine()
    While line <> Nothing
        Dim tokens = line.Split("=")
        If tokens.Length < 2 Then
            Continue While
        End If
        dic.Add(tokens(0), tokens(1))
        line = reader.ReadLine()
    End While
End Using

Outras dicas

Eu resolvi isso com esse código bastante desagradável;

    Dim dictionary As New Dictionary(Of String, String)
    Dim x As String = "x?" & Replace(tmp.ToString(), vbCrLf, "&")
    Dim arr As String() = x.Split("?".ToCharArray())
    If arr.Length >= 2 Then
        Dim arr2 As String() = arr(1).Split("&".ToCharArray())
        For Each item As String In arr2
            Dim arr3 As String() = item.Split("=".ToCharArray())
            dictionary.Add(arr3(0), arr3(1))
        Next
    End If

Espero que ajude alguém lá fora e se alguém puder sugerir melhorias, faça :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top