VALORES FIXOS DE UM ARQUIVO TXT
tenho um arquivo de text que preciso pegar os retorno escritos nele ex.:
[STATUS]
Versao=SP-CTe-22-12-2016
TpAmb=2
VerAplic=SP-CTe-22-12-2016
CStat=107
XMotivo=Serviço em Operação
CUF=35
DhRecbto=29/12/2016 15:24:19
TMed=1
DhRetorno=30/12/1899
XObs=
OK: Rejeição: Consulta a uma Chave de Acesso muito antiga
[CONSULTA]
Versao=SP-CTe-22-12-2016
TpAmb=2
VerAplic=SP-CTe-22-12-2016
CStat=731
XMotivo=Rejeição: Consulta a uma Chave de Acesso muito antiga
CUF=35
ChCTe=35131211510992000113570010000000101755779042
DhRecbto=30/12/1899
NProt=
DigVal=
preciso pegar esse valores e jogar em um listbox ou textbox separados:
[CONSULTA]
Versao=SP-CTe-22-12-2016
TpAmb=2
VerAplic=SP-CTe-22-12-2016
CStat=731
XMotivo=Rejeição: Consulta a uma Chave de Acesso muito antiga
CUF=35
ChCTe=35131211510992000113570010000000101755779042
DhRecbto=30/12/1899
NProt=
DigVal=
alguém tem uma dica ?
então preciso pegar todos dados de um txt ou um textbox com uma palavra e filtrar ex.: [INICIO] x [FIM]
[dados]
.... conteúdo
[dados]
só aparecer no Listbox o que esta entre essas tags
ja adiantei assim,
Dim Conteudo As String
If txt.Text.Contains([Ô][ENVIO][Ô]) Then
Conteudo = txt.Text.Substring(txt.Text.IndexOf([Ô][ENVIO][Ô]), _
txt.Text.IndexOf([Ô][RETORNO][Ô]) - txt.Text.IndexOf([Ô][ENVIO][Ô]))
txt_de_Saida.Text = Code
End If
ele aparece apenas o primeiro, precisava aparecer todos que esta na txt
Depois navega pelos blocos
Ficaria algo assim
dim A() as string = [texto do arquivo].Split([Ô][palavra chave][Ô])
for Each S as string in A
[ô]Código para tratar o texto do bloco
Next
Citação::
Por que vc não usa um Split para separar o conteúdo do teu arquvo em blocos de texto
Depois navega pelos blocos
Ficaria algo assim
dim A() as string = [texto do arquivo].Split([Ô][palavra chave][Ô])
for Each S as string in A
[ô]Código para tratar o texto do bloco
Next
ola obrigado por responder e atenção. entao esse método, nao pegaria so o caracter, pois se eu colocar na pesquina [Ô]ENVIO[Ô], ele pegara tudo que tiver as letras ?
Preciso pegar um bloco de informações repetidas em um txt ou textbox, exemplo
[ENVIO]
Versao=SP-CTe-22-12-2016
TpAmb=2
VerAplic=SP-CTe-22-12-2016
CStat=103
XMotivo=Lote recebido com sucesso
CUF=35
NRec=351000010470535
DhRecbto=28/12/2016 17:15:13
TMed=1
Rejeição: Falha no Schema XML do CT-e
[RETORNO]
Versao=SP-CTe-22-12-2016
TpAmb=2
VerAplic=SP-CTe-22-12-2016
NRec=351000010470535
CStat=225
XMotivo=Rejeição: Falha no Schema XML do CT-e
CUF=35
----------------------------------aqui ele pula linha -----------------------
e fica encaixando as atualizações neste formato em blocos começando com [Envio]
obrigado pela força
Citação::
Sim... O Split lê o bloco de texto entre os caracteres delimitadores, independente do número de linhas ou quantidade de caracteres
entao, o Split funciona apenas caracteres delimitadores e nao para palavras ou blocos
abs
Digamos que vc tenha a seguinte estrutura
Bloco
Linha 01
linha 02
Linha 03
Linha 04
Bloco
Linha 01
Linha 02
Bloco
Linha 01
linha 02
Linha 03
Linha 04
Linha 05
E todo o texto acima estiver numa variável do tipo string chamada X por exemplo
se Fizer
Dim A() as string = X.split([Ô]Boloco[Ô])
Vc terá A formando um vetor com 3 valores
A(0) = Linha 01
linha 02
Linha 03
Linha 04
A(1) = Linha 01
Linha 02
A(2) = Linha 01
linha 02
Linha 03
Linha 04
Linha 05
Crie um programinha com os dados acima e depois execute
For each S as string in A
Msgbox S
Next
E vai ver o resultado
Citação::
assim
Digamos que vc tenha a seguinte estrutura
Bloco
Linha 01
linha 02
Linha 03
Linha 04
Bloco
Linha 01
Linha 02
Bloco
Linha 01
linha 02
Linha 03
Linha 04
Linha 05
E todo o texto acima estiver numa variável do tipo string chamada X por exemplo
se Fizer
Dim A() as string = X.split([Ô]Boloco[Ô])
Vc terá A formando um vetor com 3 valores
A(0) = Linha 01
linha 02
Linha 03
Linha 04
A(1) = Linha 01
Linha 02
A(2) = Linha 01
linha 02
Linha 03
Linha 04
Linha 05
Crie um programinha com os dados acima e depois execute
For each S as string in A
Msgbox S
Next
E vai ver o resultado
obrigado pelo retorno e ajuda , como te falei acima
Dim A() As String = txtSai.Text.Split([Ô][ENVIO][Ô])
For Each S As String In A
MsgBox(S)
Next
ele vai buscar delimitar apenas o [Ô][[Ô] - esse é o Resultado
a cada [ da uma mensagem
obrigado
Fiz um exemplo bem funcional:
Dim dicArquivoRetorno As New Dictionary(Of String, Dictionary(Of String, String))()
Dim lstStringFile As List(Of String) = File.ReadAllLines([Ô]C:\ArquivoIni.ini[Ô]).ToList()
Dim nomeClasse As String = String.Empty
For i As Integer = 0 To lstStringFile.Count - 1
Dim linha As String = lstStringFile(i).Trim()
If linha = String.Empty Then Continue For
If linha.Contains([Ô][[Ô]) AndAlso linha.Contains([Ô]][Ô]) Then
nomeClasse = linha.Replace([Ô][[Ô], [Ô][Ô]).Replace([Ô]][Ô], [Ô][Ô])
dicArquivoRetorno.Add(nomeClasse, New Dictionary(Of String, String)())
Else
If nomeClasse = String.Empty Then Continue For
Dim dadosLinha As String() = linha.Split([Ô]=[Ô])
If dadosLinha.Count() < 2 Then Continue For
dicArquivoRetorno(nomeClasse).Add(dadosLinha(0).Trim(), dadosLinha(1).Trim())
End If
Next
[ô] Exemplo de como pegar os Dados
Dim consultaCStat As String = dicArquivoRetorno([Ô]CONSULTA[Ô])([Ô]CStat[Ô])
Dim consultaChaveCTe As String = dicArquivoRetorno([Ô]CONSULTA[Ô])([Ô]ChCTe[Ô])
Dim statusDhRecbto As String = dicArquivoRetorno([Ô]STATUS[Ô])([Ô]DhRecbto[Ô])
Dim statusDhRetornoe As String = dicArquivoRetorno([Ô]STATUS[Ô])([Ô]DhRetorno[Ô])