QUEBRA DE STRING
Fala galera gente boa! Estou com um projeto de VB6 e acabei encontrando um pequeno problema!
If Not (EOF(F)) Then Line Input #F, HeaderArquivo
While Not (EOF(F))
Line Input #F, Detalhe
QuebrarString = Split(Detalhe, [Ô]|[Ô])
For i = 1 To UBound(QuebrarString)
Lst_Movimentacao.AddItem QuebrarString(i)
Next i
Wend
Aqui estou fazendo a leitura de um arquivo TXT. Vou colocar um exemplo do texto.
123|456|789|
987|654|321|
123|456|789|
987|654|321|
Ele faz a leitura e joga tudo dentro da variável [Ô]Detalhe[Ô].
Depois eu começo a quebrar a variável toda vez que ele encontrar o [Ô]|[Ô](pipe). Com isso ele gera o seguinte resultado:
123
456
789
987
654
321
123
456
789
987
654
321
Até ai tudo bem! Mas o problema é que eu preciso pular a linha: 987|654|321| para não ter que ficar fazendo loop sem necessidade!
Ainda mais pq o arquivo pode conter 200 linhas e destas 200 eu só preciso de metade!
Se alguém puder me ajudar eu agradeço!
If Not (EOF(F)) Then Line Input #F, HeaderArquivo
While Not (EOF(F))
Line Input #F, Detalhe
QuebrarString = Split(Detalhe, [Ô]|[Ô])
For i = 1 To UBound(QuebrarString)
Lst_Movimentacao.AddItem QuebrarString(i)
Next i
Wend
Aqui estou fazendo a leitura de um arquivo TXT. Vou colocar um exemplo do texto.
123|456|789|
987|654|321|
123|456|789|
987|654|321|
Ele faz a leitura e joga tudo dentro da variável [Ô]Detalhe[Ô].
Depois eu começo a quebrar a variável toda vez que ele encontrar o [Ô]|[Ô](pipe). Com isso ele gera o seguinte resultado:
123
456
789
987
654
321
123
456
789
987
654
321
Até ai tudo bem! Mas o problema é que eu preciso pular a linha: 987|654|321| para não ter que ficar fazendo loop sem necessidade!
Ainda mais pq o arquivo pode conter 200 linhas e destas 200 eu só preciso de metade!
Se alguém puder me ajudar eu agradeço!
Olá,
tente usar o [txt-color=#e80000]STEP [/txt-color]no ciclo FOR
For i = 1 To UBound(QuebrarString) Step 2
Lst_Movimentacao.AddItem QuebrarString(i)
Next i
penso que seja isso...
té +
Olá GANDA_NICK... testei esse método que você me informou e não funcionou!
Dim x as integer
For i = 1 To UBound(QuebrarString)
Lst_Movimentacao.AddItem QuebrarString(i)
x=x+1
if x=2 then i =i+1 :x=0
Next i
For i = 1 To UBound(QuebrarString)
Lst_Movimentacao.AddItem QuebrarString(i)
x=x+1
if x=2 then i =i+1 :x=0
Next i
Se você for por isso na list como no seu exemplo
Se você for deixa na variavel
Acredito que de certo.
While Not (EOF(F))
Line Input #F, Detalhe
QuebrarString = Split(Detalhe, [Ô]|[Ô])
For i = 1 To UBound(QuebrarString)
Lst_Movimentacao.AddItem QuebrarString(i)
Lst_Movimentacao.AddItem [Ô] [Ô] [ô]Faz uma linha em branco
Next i
Wend
Se você for deixa na variavel
QuebrarString = Split(Detalhe, [Ô]|[Ô]) & chr(13) [ô] chr(13) é um ENTER
Acredito que de certo.
vendo bem acho que não percebi bem o que vc quer fazer...
vc quer saltar a linha do *.txt antes mesmo de entrar do ciclo WHILE ?? as linhas são alternadas??? qual o padrão ??
só um detalhe, quando vc usa o split, o primeiro elemento do array é o Zero (0) e não o um (1)
vc quer saltar a linha do *.txt antes mesmo de entrar do ciclo WHILE ?? as linhas são alternadas??? qual o padrão ??
só um detalhe, quando vc usa o split, o primeiro elemento do array é o Zero (0) e não o um (1)
Galera testei todos os comandos que me enviaram, nenhum deu certo! hahahahaha
E Ganda_Nick o Arquivo.txt vai vir desta maneira:
123|456|789|
987|654|321|
123|456|789|
987|654|321|
Eu só quero as linhas onde contém o 123|456|789|, no caso:
123|456|789|
123|456|789|
Eu poderia utilizar o comando MID, mas estas linhas não virão sempre com o mesmo tamanho. 123|456|789|, pode ser que elas venham: 12345|6|78|912|
E sobre o primeiro elemento ser o Zero, isso eu sei. Mas é que no meu código fonte eu preciso do segundo elemento mesmo!
E Ganda_Nick o Arquivo.txt vai vir desta maneira:
123|456|789|
987|654|321|
123|456|789|
987|654|321|
Eu só quero as linhas onde contém o 123|456|789|, no caso:
123|456|789|
123|456|789|
Eu poderia utilizar o comando MID, mas estas linhas não virão sempre com o mesmo tamanho. 123|456|789|, pode ser que elas venham: 12345|6|78|912|
E sobre o primeiro elemento ser o Zero, isso eu sei. Mas é que no meu código fonte eu preciso do segundo elemento mesmo!
O problema do colega é retirar linhas iguais do arquivo txt, e ler o restante, para isto um novo laço deve ser criar.
veja
eu não testei mas acredito que o código acima pulará as linhas iguais
veja
Dim ArqTemp As String
ArqTemp = [Ô][Ô]
If Not (EOF(F)) Then Line Input #F, HeaderArquivo
While Not (EOF(F))
Line Input #F, Detalhe
If Instr(1, ArqTemp, Detalhe) = 0 Then
ArqTemp = ArqTemp & Detalhe
QuebrarString = Split(Detalhe, [Ô]|[Ô])
For i = 1 To UBound(QuebrarString)
Lst_Movimentacao.AddItem QuebrarString(i)
Next i
End If
Wend
eu não testei mas acredito que o código acima pulará as linhas iguais
Cara se o texto for fixo da pra fazer assim
Não Testei mais vai por essa lógica que vai dar certo!!
Identifica uma parte fixa na linha e coloca para comparar dentro do IF
Dim texto As String
Dim Detalhe As String
Dim Linhas As String
Dim QuebraString As String
texto = [Ô]987|654|321|[Ô]
Linhas = [Ô][Ô]
Open [Ô]C:\seuArquivo.txt[Ô] For Input As #F
While Not EOF(F)
Line Input #F, Detalhe
If texto <> Detalhe Then
Linhas = Linhas & Detalhes
If Rigth(Linhas, 1) <> [Ô]|[Ô] Then Linhas = Linhas & [Ô]|[Ô]
End If
Wend
Close #F
[ô]Após atribuir tudo para a variavel Linhas você coloca no Lst_Movimentacao
QuebraString = Split(Linhas, [Ô]|[Ô])
For i = 0 To Ubound(QuebraString)
Lst_Movimentacao.AddItem QuebraString(i)
Next i
Não Testei mais vai por essa lógica que vai dar certo!!
Identifica uma parte fixa na linha e coloca para comparar dentro do IF
Galera... consegui fazer... mas em uma gambiarra danada!
While Not (EOF(F))
Line Input #F, Detalhe
QuebrarString = Split(Detalhe, [Ô]|[Ô])
For i = 0 To UBound(QuebrarString)
If i = 0 And QuebrarString(i) = 1 Then
Identificador = 1
ElseIf i = 0 And QuebrarString(i) = 2 Then
Identificador = 2
End If
If Identificador = 1 Then
If i = 1 Then
NumeroNFSe = QuebrarString(i)
Lst_Movimentacao.AddItem NumeroNFSe
ElseIf i = 15 Then
DataNfe = Format(QuebrarString(i), [Ô]dd[Ô] & [Ô]/[Ô] & [Ô]mm[Ô] & [Ô]/[Ô] & [Ô]yyyy[Ô])
Lst_Movimentacao.AddItem DataNfe
ElseIf i = 22 Then
ValorNota = Format$(Replace(QuebrarString(i), [Ô].[Ô], [Ô],[Ô]), [Ô]R$ #,##0.00; ($#,##0.00)[Ô])
Lst_Movimentacao.AddItem ValorNota
ElseIf i = 75 Then
NumeroNFProvisorio = QuebrarString(i)
Lst_Movimentacao.AddItem NumeroNFProvisorio
End If
End If
Next i
Wend
Ficou bem porco... mas como tenho que entregar esse projeto logo. Vou deixar assim, se eu terminar antes da data. Vou alterar o código!
Obrigado a todos que tentaram me ajudar!
Abraços
While Not (EOF(F))
Line Input #F, Detalhe
QuebrarString = Split(Detalhe, [Ô]|[Ô])
For i = 0 To UBound(QuebrarString)
If i = 0 And QuebrarString(i) = 1 Then
Identificador = 1
ElseIf i = 0 And QuebrarString(i) = 2 Then
Identificador = 2
End If
If Identificador = 1 Then
If i = 1 Then
NumeroNFSe = QuebrarString(i)
Lst_Movimentacao.AddItem NumeroNFSe
ElseIf i = 15 Then
DataNfe = Format(QuebrarString(i), [Ô]dd[Ô] & [Ô]/[Ô] & [Ô]mm[Ô] & [Ô]/[Ô] & [Ô]yyyy[Ô])
Lst_Movimentacao.AddItem DataNfe
ElseIf i = 22 Then
ValorNota = Format$(Replace(QuebrarString(i), [Ô].[Ô], [Ô],[Ô]), [Ô]R$ #,##0.00; ($#,##0.00)[Ô])
Lst_Movimentacao.AddItem ValorNota
ElseIf i = 75 Then
NumeroNFProvisorio = QuebrarString(i)
Lst_Movimentacao.AddItem NumeroNFProvisorio
End If
End If
Next i
Wend
Ficou bem porco... mas como tenho que entregar esse projeto logo. Vou deixar assim, se eu terminar antes da data. Vou alterar o código!
Obrigado a todos que tentaram me ajudar!
Abraços
Tópico encerrado , respostas não são mais permitidas