ARQUIVO TEXTO

ARNALDOCRUZ 06/08/2010 08:05:22
#349590
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>

JEANCOELHO 06/08/2010 08:34:21
#349592
Text1 = Replace(Text1, [Ô]> <[Ô], [Ô]>[Ô] & vbCrLf & [Ô]<[Ô])
MARCELO.TREZE 06/08/2010 12:36:28
#349617
Resposta escolhida
Bom coloque um listbox no seu form e cole o código a seguir

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

GERARDA 06/08/2010 12:56:44
#349623
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
MARCOSLING 06/08/2010 13:53:34
#349628
Mas isso não é um arquivo xml?
ARNALDOCRUZ 06/08/2010 14:54:58
#349641
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.


ARNALDOCRUZ 06/08/2010 16:39:27
#349657
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
Tópico encerrado , respostas não são mais permitidas