[AJUDA]VB6 COM ARQUIVOS DE TEXTO

NAM4 20/07/2010 10:33:39
#347888
Bom dia galera,

gostaria de tirar uma duvida.

tenho um programa que pega de um arquivo TXT as linhas delimitadas por [Ô]|[Ô] e joga no banco de dados...

a rotina esta correta, quero saber como faço uma coisa muito simples, mas que não consegui ainda (sou novato em vb, e esse programa esta em vb6)

a rotina é a seguinte:

Citação:

Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, [Ô]|[Ô])
con.Execute [Ô]INSERT INTO cemar_imp_clientes(Col001, Col002, Col003, Col004, Col005, Col006, Col007, Col008, Col009, Col010, Col011, Col012, Col013, Col014,Col015) VALUES ([ô][Ô] & line(0) & [Ô][ô],[ô][Ô] & line(1) & [Ô][ô],[ô][Ô] & line(2) & [Ô][ô],[ô][Ô] & line(3) & [Ô][ô],[ô][Ô] & line(4) & [Ô][ô],[ô][Ô] & line(5) & [Ô][ô],[ô][Ô] & line(6) & [Ô][ô],[ô][Ô] & line(7) & [Ô][ô],[ô][Ô] & line(8) & [Ô][ô],[ô][Ô] & line(9) & [Ô][ô],[ô][Ô] & line(10) & [Ô][ô],[ô][Ô] & line(11) & [Ô][ô],[ô][Ô] & line(12) & [Ô][ô],[ô][Ô] & line(13) & [Ô][ô],[ô][Ô] & line(14) & [Ô][ô])[Ô]
sCodigo_cliente = oRsNome
iContador = iContador + 1
progressBar.Caption = [Ô]Importando [Ô] & iContador & [Ô] clientes[Ô]
Loop



o que gostaria de fazer é o seguinte. Pegar o numero total de linhas que o txt tem...lembrando q pode ser variavel, 100, 2000 ou 29999 depende do nº de registro que tem nele

nessa parte: [txt-color=#e80000]progressBar.Caption = [Ô]Importando [Ô] & iContador & [Ô] clientes[Ô][/txt-color]

ele faz um progress bar basico mostrando em tempo real os registros cadastrados... ele está assim:
Importando XXXX arquivos

e gostaria de

Importando XXXX arquivos de YYYYY

onde YYYYY seria o numero de itens que o txt tem (linhas)


Obrigado desde já
MKING 20/07/2010 10:49:32
#347894
Resposta escolhida
Da pra incluir um outro loop antes, algo + ou - assim;

Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, [Ô]|[Ô])
Loop

Ai vc vai ter um vetor line com todo o conteudo, pegue o último indice desse vetor e some + 1, ai vc tera a qntidade de linhas do arquivos

espero que ajude
NAM4 20/07/2010 10:54:57
#347895
primeiramente mto obrigado pela agilidade da resposta *-*
bom eu pensei em fazer outro looop ,

ate fiz mas nao consegui resultados...

essa parte que vc fala [Ô]pegar o ultimo indice...[Ô] seria?

pq pelo que entendi pra eu pegar este [Ô]ultimo indice[Ô] eu teria que ter um numero de linhas especifico né ?

ai pegaria line(x)
onde x seria a ultima linha?

oabrigado mais uma vez
MKING 20/07/2010 11:43:30
#347901
Crie um novo projetinho e insira o conteudo abaixo, assim fica mais facil de vc entender a idéia, ai depois vc adapta a sua função

[ô]crie um projeto simples no VB, e inclua apenas um botão sem mudar o nome
Dim dados() As String [ô]declaração do vetor

Private Sub Command1_Click()
[ô]dados seria sua variavel que
[ô]vai receber todo o conteudo
[ô]do arquivo de texto através
[ô]do loop, aqui eu inseri
[ô]manualmente só pra vc entender a idéia
dados = Split([Ô]dado1|dado2|dado3|dado4|dado5[Ô], [Ô]|[Ô])
[ô]isso vai me retornar o tamanho
[ô]do vetor, que foi separado por pipeline (|)
[ô]como ele inicia em zero, o retorno
[ô]será 4, ai vc soma mais 1 e terá o total de linhas
MsgBox UBound(dados)
End Sub
NAM4 20/07/2010 11:48:23
#347902
muito obrigado MKING,

eu entendi e vou tentar colocar isso no meu codigo

caso tenha duvidas ainda eu posto *--*

abraços e mais uma vez obrigado!




---------------------------------EDIT

MKING eu fiz o que vc disse, e me deparei com um problema...

o meu arquivo txt esta estruturado assim:

codigo | texto | data | qualqueroutracoisa

fazendo o que vc me disse, realmente pega o valor, mas ele pega a cada final de | e nao a cada final de linha.... ou seja se tenho 3 linhas com 3 pipes ele vai resultar em 12...


será que se eu usar o comando

line = Split(fsStream.AtEndOfLine)


terei a informação que preciso?

abraços
MKING 20/07/2010 12:17:21
#347911
utilizando essa forma não tenho ctz, mas tente um desses 2 métodos pra ver se funciona, e me diga oq ocorreu .

Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, vbcrlf)
Loop

ou

Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, chr(13))
Loop
NAM4 20/07/2010 13:22:14
#347920
MKING, utilizei estas 2 formas, pois bem

as duas ele percorre o looping, mas qdo coloco pra exibir o contador

ele aparece todos como 0...


ele roda o numero de linhas q tem o arquivo txt porem exibe o numero 0 ao invez.

exemplo... tenho 3 linhas no TXT, o contador passa 3 vezes porem qdo mando exibir ele exibe o numero [Ô]0[Ô] (zero)


obrigado






Em um outro forum postei essa duvida e o cara (gringo) falou pra eu fazer isso:

Citação:


Private Function LinesInFile(ByVal file_name As String) As Long
Dim fnum As Integer
Dim lines As Long
Dim one_line As String

fnum = FreeFile
Open file_name For Input As #fnum
Do While Not EOF(fnum)
Line Input #fnum, one_line
lines = lines + 1
Loop
Close fnum

LinesInFile = lines
MsgBox UBound(LinesInFile)
End Function



coloquei essa funçao e utilizei assim:

LinesInFile(fsStream)

porem tb n tive sucesso =/





-------------EDIT--------------------
Galera, e principalmente MKING, eu consegui utilizando esta funçao que postei a cima

fiz do seguinte modo:

Citação:


[txt-color=#e80000]Private Function LinesInFile(ByVal file_name As String) As Long
Dim fnum As Integer
Dim lines As Long
Dim one_line As String

fnum = FreeFile
Open file_name For Input As #fnum
Do While Not EOF(fnum)
Line Input #fnum, one_line
lines = lines + 1
Loop
Close fnum

LinesInFile = lines
End Function[/txt-color]

Private Sub Command2_Click()
On Error GoTo ErrorMsg
Dim fs As New FileSystemObject
Dim fsStream As TextStream
Dim oRsNome
Dim iContador
Dim iContadors As Long
Dim sCodigo_cliente

Set fsStream = fs.OpenTextFile(txtArquivo.Text)

[ô]Set fsStream = fs.OpenTextFile([Ô]C:\Documents and Settings\bsallu1a\Desktop\Bruno\DadosCarga\cliente.txt[Ô])

Dim line As Variant
Dim NovoValor As Variant
Dim NovoValor1 As Variant
Dim NovoValor2 As Variant
Dim NovoValor3 As Variant



Dim fname As String
Dim num_lines As Long

MousePointer = vbHourglass
DoEvents
On Error Resume Next

[txt-color=#e80000] fname = txtArquivo.Text
num_lines = LinesInFile(fname)[/txt-color]


Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, [Ô]|[Ô])
con.Execute [Ô]INSERT INTO cemar_imp_clientes(Col001, Col002, Col003, Col004, Col005, Col006, Col007, Col008, Col009, Col010, Col011, Col012, Col013, Col014,Col015) VALUES ([ô][Ô] & line(0) & [Ô][ô],[ô][Ô] & line(1) & [Ô][ô],[ô][Ô] & NovoValor & [Ô][ô],[ô][Ô] & line(3) & [Ô][ô],[ô][Ô] & NovoValor2 & [Ô][ô],[ô][Ô] & NovoValor3 & [Ô][ô],[ô][Ô] & NovoValor3 & [Ô][ô],[ô][Ô] & line(7) & [Ô][ô],[ô][Ô] & line(8) & [Ô][ô],[ô][Ô] & line(9) & [Ô][ô],[ô][Ô] & line(10) & [Ô][ô],[ô][Ô] & line(11) & [Ô][ô],[ô][Ô] & line(12) & [Ô][ô],[ô][Ô] & line(13) & [Ô][ô],[ô][Ô] & line(14) & [Ô][ô])[Ô]
sCodigo_cliente = oRsNome
iContador = iContador + 1
progressBar.Caption = [Ô]Importando [Ô] & iContador & [Ô] clientes de [Ô] [txt-color=#e80000]& Format$(num_lines)[/txt-color]

Loop
.
.
.



o que esta em vermelho foi o que adicionei, a partir do codigo original a cima postado


muito obrigado *-*


Bruno
MKING 20/07/2010 14:15:50
#347931
qual o conteudo de fsStream ?
é o caminho do arquivo ??

e tem que fazer uma modificação no msgbox, segue exemplo:

Public Function LinesInFile(ByVal file_name As String) As Long
Dim fnum As Integer
Dim lines As Long
Dim one_line As String

fnum = FreeFile
Open file_name For Input As #fnum
Do While Not EOF(fnum)
Line Input #fnum, one_line
lines = lines + 1
Loop
Close fnum

LinesInFile = lines
MsgBox LinesInFile
End Function


---------------------EDIT---------------------------

OK, postei antes de ver a msg
NAM4 20/07/2010 14:21:04
#347932
MKING, atualisei meu ultimo post acho que junto quando vc estava me respondendo =D

agora vi o que vc postou

ja consegui arrumar

eu confundi o fsStream com o valor do local onde ta o txt que no caso era o textbox

ty a lot pra ti mano

abraços e vlw


OBS: podem dar CLOSE, postei a solução ai em cima

obrigado MKING
Tópico encerrado , respostas não são mais permitidas