ARQUIVO TEXTO
Bom dia
Recebo um arquivo texto com uma linha como abaixo( isso que está abxio fica em uma unica linha do arquivo, postei ai somente parte
, no principio pensei como todos vem separados por espaço faço um código que pegue as partes separadas pelos espaços, mas no final da linha tem uma tag
que esta é esta tag <MENSAGEMVALIDACAO>------aqui entra texto com espaços </MENSAGEMVALIDACAO>
<transmissaoSNGPC> <cabecalho> <CODIGOHASH>147981faaa7752c54c2de4fdee66c5ad</CODIGOHASH> <DATATRANSMISSAO>13/10/2009</DATATRANSMISSAO> <DATAVALIDACAO>13/10/2009</DATAVALIDACAO>
como eu faço pra deixar o arquivo como abaixo
<transmissaoSNGPC>
<cabecalho>
<CODIGOHASH>147981faaa7752c54c2de4fdee66c5ad</CODIGOHASH>
<DATATRANSMISSAO>13/10/2009</DATATRANSMISSAO>
<DATAVALIDACAO>13/10/2009</DATAVALIDACAO>
<MENSAGEMVALIDACAO>jhdhdkhkj dfhdkjhfkjh fhjk fjl </MENSAGEMVALIDACAO>
Recebo um arquivo texto com uma linha como abaixo( isso que está abxio fica em uma unica linha do arquivo, postei ai somente parte
, no principio pensei como todos vem separados por espaço faço um código que pegue as partes separadas pelos espaços, mas no final da linha tem uma tag
que esta é esta tag <MENSAGEMVALIDACAO>------aqui entra texto com espaços </MENSAGEMVALIDACAO>
<transmissaoSNGPC> <cabecalho> <CODIGOHASH>147981faaa7752c54c2de4fdee66c5ad</CODIGOHASH> <DATATRANSMISSAO>13/10/2009</DATATRANSMISSAO> <DATAVALIDACAO>13/10/2009</DATAVALIDACAO>
como eu faço pra deixar o arquivo como abaixo
<transmissaoSNGPC>
<cabecalho>
<CODIGOHASH>147981faaa7752c54c2de4fdee66c5ad</CODIGOHASH>
<DATATRANSMISSAO>13/10/2009</DATATRANSMISSAO>
<DATAVALIDACAO>13/10/2009</DATAVALIDACAO>
<MENSAGEMVALIDACAO>jhdhdkhkj dfhdkjhfkjh fhjk fjl </MENSAGEMVALIDACAO>
Text1 = Replace(Text1, [Ô]> <[Ô], [Ô]>[Ô] & vbCrLf & [Ô]<[Ô])
Bom coloque um listbox no seu form e cole o código a seguir
tenta ai eu fiz mas não testei
Function AbreArquivo(sArquivo As String)
Dim iARQ As Integer
Dim sLinha As String
Dim MsgVal As String
Dim MsgIni As String
Dim Result() As String
Dim Pos As String
iARQ = FreeFile
Open sArquivo For Input As iARQ
Do While Not EOF(iARQ)
[ô]Pega o conteúdo da linha
Line Input #iARQ, sLinha
Pos = InStr(1, sLinha,[Ô]<MENSAGEMVALIDACAO>[Ô])
MsgVal = Mid(sLinha, Pos - 1, Len(sLinha) - Pos)
MsgIni = Mid(sLinha, 1, Pos)
Result = Split(MsgIni,[Ô] [Ô])
For F = 0 To Ubound(Result)
List1.AddItem Result(F)
Next F
List1. AddItem MsgVal
Loop
[ô]Fecha o arquivo
Close iARQ
End Function
[ô]P/ usar:
Call AbreArquivo([Ô]C:\Texto.TXT[Ô])
tenta ai eu fiz mas não testei
abra um novo projeto coloque um listbox,um commandbutton,um textbox
Private Sub Command1_Click()
Dim limpavazia
Dim i As Integer
Dim vetor As Variant
Text1.Text = [Ô]<transmissaoSNGPC> <cabecalho> <CODIGOHASH>147981faaa7752c54c2de4fdee66c5ad</CODIGOHASH> <DATATRANSMISSAO>13/10/2009</DATATRANSMISSAO> <DATAVALIDACAO>13/10/2009</DATAVALIDACAO>[Ô]
vetor = Split(Text1.Text)
List1.Clear
For i = LBound(vetor) To UBound(vetor)
List1.AddItem vetor(i)
Next
For limpavazia = List1.ListCount - 1 To 0 Step -1
If Len(List1.List(limpavazia)) = 0 Then List1.RemoveItem (limpavazia)
Next
End Sub
aqui deu certo
Private Sub Command1_Click()
Dim limpavazia
Dim i As Integer
Dim vetor As Variant
Text1.Text = [Ô]<transmissaoSNGPC> <cabecalho> <CODIGOHASH>147981faaa7752c54c2de4fdee66c5ad</CODIGOHASH> <DATATRANSMISSAO>13/10/2009</DATATRANSMISSAO> <DATAVALIDACAO>13/10/2009</DATAVALIDACAO>[Ô]
vetor = Split(Text1.Text)
List1.Clear
For i = LBound(vetor) To UBound(vetor)
List1.AddItem vetor(i)
Next
For limpavazia = List1.ListCount - 1 To 0 Step -1
If Len(List1.List(limpavazia)) = 0 Then List1.RemoveItem (limpavazia)
Next
End Sub
aqui deu certo
Mas isso não é um arquivo xml?
fin uma adaptação das duas resposta está quase perfeito
Dim limpavazia
Dim i As Integer
Dim vetor As Variant
Dim iARQ As Integer
Dim sLinha As String
Dim MsgVal As String
iARQ = FreeFile
Open sArquivo For Input As iARQ
Do While Not EOF(iARQ)
Line Input #iARQ, sLinha
GoSub executa
Loop
Close iARQ
Exit Function
executa:
MsgVal = sLinha
vetor = Split(MsgVal)
List1.Clear
For i = LBound(vetor) To UBound(vetor)
List1.AddItem vetor(i)
Next
For limpavazia = List1.ListCount - 1 To 0 Step -1
If Len(List1.List(limpavazia)) = 0 Then List1.RemoveItem (limpavazia)
Next
Return
Pra chamar
Call AbreArquivo([Ô]C:\Farmacia\Envio\Retorno.txt[Ô])
POREM TEM UNS DETALHES CAVERNOSO
Tipo
se existir a tag <MensagemValidacao> é porque houve erro, nesse caso eu tenho que pegar somente o que está dentro da tag <MensagemValidacao> E FECHAR O ARQUIVO
se não houver A TAG <MensagemValidacao> então eu tenho que pegar só o conteudo da tag <DATAVALIDACAO> E FECHAR O ARQUIVO.
mas já está 90% pronto.
Obrigado colegas, assim que concluir eu posto o código final e fecho o tópico.
Dim limpavazia
Dim i As Integer
Dim vetor As Variant
Dim iARQ As Integer
Dim sLinha As String
Dim MsgVal As String
iARQ = FreeFile
Open sArquivo For Input As iARQ
Do While Not EOF(iARQ)
Line Input #iARQ, sLinha
GoSub executa
Loop
Close iARQ
Exit Function
executa:
MsgVal = sLinha
vetor = Split(MsgVal)
List1.Clear
For i = LBound(vetor) To UBound(vetor)
List1.AddItem vetor(i)
Next
For limpavazia = List1.ListCount - 1 To 0 Step -1
If Len(List1.List(limpavazia)) = 0 Then List1.RemoveItem (limpavazia)
Next
Return
Pra chamar
Call AbreArquivo([Ô]C:\Farmacia\Envio\Retorno.txt[Ô])
POREM TEM UNS DETALHES CAVERNOSO
Tipo
se existir a tag <MensagemValidacao> é porque houve erro, nesse caso eu tenho que pegar somente o que está dentro da tag <MensagemValidacao> E FECHAR O ARQUIVO
se não houver A TAG <MensagemValidacao> então eu tenho que pegar só o conteudo da tag <DATAVALIDACAO> E FECHAR O ARQUIVO.
mas já está 90% pronto.
Obrigado colegas, assim que concluir eu posto o código final e fecho o tópico.
EIS a solução adaptada da resposta do mercelo13, como o que eu quero é somente o conteudo de duas tag se tiver uma pego o conteudo da outra. e todo arquivo txt está disposto em uma unica linha. de usar um listbox usei um campo texto.
Call AbreArquivo([Ô]C:\Farmacia\Envio\Retorno.txt[Ô])
Function AbreArquivo1(sArquivo As String)
Dim iARQ As Integer
Dim sLinha As String
Dim MsgVal As String
Dim Pos As String
Dim Pos1 As String
Me.mensagem = [Ô][Ô]
Open sArquivo For Input As #1
Line Input #1, sLinha
Pos = InStr(1, sLinha, [Ô]<MENSAGEMVALIDACAO>[Ô])
If Pos = [Ô]0[Ô] Then
Pos = InStr(1, sLinha, [Ô]<DATAVALIDACAO>[Ô]) [ô]//inicio da tag
Pos1 = InStr(1, sLinha, [Ô]</DATAVALIDACAO>[Ô]) [ô]//final da tag
MsgVal = Mid(sLinha, (Pos + 15), (Pos1 - (Pos + 16) + 1))
Else
Pos1 = InStr(1, sLinha, [Ô]</MENSAGEMVALIDACAO>[Ô])
MsgVal = Mid(sLinha, (Pos + 19), (Pos1 - (Pos + 20) + 1))
MsgVal = Replace(MsgVal, [Ô][NOVA_LINHA][Ô], [Ô] [Ô])
End If
Me.mensagem = MsgVal
Close #1
End Function
Call AbreArquivo([Ô]C:\Farmacia\Envio\Retorno.txt[Ô])
Function AbreArquivo1(sArquivo As String)
Dim iARQ As Integer
Dim sLinha As String
Dim MsgVal As String
Dim Pos As String
Dim Pos1 As String
Me.mensagem = [Ô][Ô]
Open sArquivo For Input As #1
Line Input #1, sLinha
Pos = InStr(1, sLinha, [Ô]<MENSAGEMVALIDACAO>[Ô])
If Pos = [Ô]0[Ô] Then
Pos = InStr(1, sLinha, [Ô]<DATAVALIDACAO>[Ô]) [ô]//inicio da tag
Pos1 = InStr(1, sLinha, [Ô]</DATAVALIDACAO>[Ô]) [ô]//final da tag
MsgVal = Mid(sLinha, (Pos + 15), (Pos1 - (Pos + 16) + 1))
Else
Pos1 = InStr(1, sLinha, [Ô]</MENSAGEMVALIDACAO>[Ô])
MsgVal = Mid(sLinha, (Pos + 19), (Pos1 - (Pos + 20) + 1))
MsgVal = Replace(MsgVal, [Ô][NOVA_LINHA][Ô], [Ô] [Ô])
End If
Me.mensagem = MsgVal
Close #1
End Function
Tópico encerrado , respostas não são mais permitidas