QUEBRA DE STRING

TAKA 16/01/2013 09:56:43
#417468
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!
GANDA.NICK 16/01/2013 10:35:49
#417471

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é +
TAKA 16/01/2013 10:44:17
#417472
Olá GANDA_NICK... testei esse método que você me informou e não funcionou!
LUIZCOMINO 16/01/2013 10:46:03
#417473
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
VELDRAME 16/01/2013 10:52:47
#417474
Se você for por isso na list como no seu exemplo

                    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.

GANDA.NICK 16/01/2013 11:01:05
#417478
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)
TAKA 16/01/2013 11:37:38
#417482
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!
MARCELO.TREZE 16/01/2013 12:02:39
#417485
O problema do colega é retirar linhas iguais do arquivo txt, e ler o restante, para isto um novo laço deve ser criar.

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



FILMAN 16/01/2013 12:39:07
#417490
Cara se o texto for fixo da pra fazer assim

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
TAKA 16/01/2013 16:53:22
#417516
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
Tópico encerrado , respostas não são mais permitidas