[AJUDA]VB6 COM ARQUIVOS DE TEXTO
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á
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
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
[ô]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
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
Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, vbcrlf)
Loop
ou
Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, chr(13))
Loop
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
é 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
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