Leer TXT con FSO.

08/08/2006 - 13:11 por fpmweb | Informe spam
Hola,

estoy leiendo un fichero txt con FileSystemObject, y me surge un problema.

El fichero dispone de varias lineas con infromación, por ejemplo:

AAADFSFSDFSD111111111Xasfas fasdfasdfdasfasd 00000002121213135afaasf
BBBDFSFSDFSD222222222asfas fasdfasd fdasfasd 00000002121213135afaasf
CCCDFSFSDSD222222222asfas fa sdfa fasdf asd d 00000002121213135afaasf

Ahora tengo que recorrer todo el txt, recuperar linea a linea y formatearlo.
En definitiva preparar los campos para realizar un insert en la base de datos.
Deberia quedar asi:

AAADFSFSDFSD
111111111
Xasfas fasdfasdfdasfasd
00000002121213135
afaasf


BBBDFSFSDFSD
222222222
asfas fasdfasd fdasfasd
00000002121213135
afaasf


CCCDFSFSDSD
etc

De esta forma recupero la linea, corto los trozos que necesito y voy
haciendo el insert en la BD para cada bloque (o linea). El problema surge que
no lo recupera correctamente.

Tengo el siguiente código:

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" & "xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
loop
tso.close


Aquí el primer response.write Mid(tso.ReadLine, 1, 9) & "<br>" lo recupera
bien,
pero cuando trato de recuperar la segunda parte del campo no lo recupera bien


Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" & "xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
response.write Mid(tso.ReadLine, 10, 3) & "<br>"
loop
tso.close

En este caso no lo recupera bien, me aparecen menos registros.

¿¿¿¿ Alguna solución ???

¿Hay algún método movefirst, movelast...?

Gracias.

Preguntas similare

Leer las respuestas

#1 Nuno Santos
08/08/2006 - 13:42 | Informe spam
No puedes hacer el readline várias veces dentro del ciclo... aqui te evio un
ejemplo en vb que hice...

file txt: (conteúdo del file teste.txt)
12345ABC012CDEFGH1
54321CBA210HGFEDC2

<codigo>
Private Sub Command1_Click()

Dim fso As New FileSystemObject
Dim tso
Set tso = fso.OpenTextFile(Me.Text1.Text)

Do Until (tso.AtEndOfStream)
strAux = tso.ReadLine 'coloco el valor de la línea en una variavel

Me.Text2.Text = Me.Text2.Text & Mid(strAux, 1, 5) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 6, 3) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 9, 3) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 12, 6) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 18, 1) & vbCrLf & vbCrLf
Loop
tso.Close
Set fso = Nothing

End Sub

Private Sub Form_Load()
Me.Text1.Text = App.Path & "\teste.txt"
Me.Text2.Text = ""
End Sub
</codigo>
NS


Nuno Santos
nunos7[REMOVER]@hotmail.com

"fpmweb" wrote in message
news:
Hola,

estoy leiendo un fichero txt con FileSystemObject, y me surge un problema.

El fichero dispone de varias lineas con infromación, por ejemplo:

AAADFSFSDFSD111111111Xasfas fasdfasdfdasfasd 00000002121213135afaasf
BBBDFSFSDFSD222222222asfas fasdfasd fdasfasd
00000002121213135afaasf
CCCDFSFSDSD222222222asfas fa sdfa fasdf asd d
00000002121213135afaasf

Ahora tengo que recorrer todo el txt, recuperar linea a linea y
formatearlo.
En definitiva preparar los campos para realizar un insert en la base de
datos.
Deberia quedar asi:

AAADFSFSDFSD
111111111
Xasfas fasdfasdfdasfasd
00000002121213135
afaasf


BBBDFSFSDFSD
222222222
asfas fasdfasd fdasfasd
00000002121213135
afaasf


CCCDFSFSDSD
etc

De esta forma recupero la linea, corto los trozos que necesito y voy
haciendo el insert en la BD para cada bloque (o linea). El problema surge
que
no lo recupera correctamente.

Tengo el siguiente código:

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
loop
tso.close


Aquí el primer response.write Mid(tso.ReadLine, 1, 9) & "<br>" lo recupera
bien,
pero cuando trato de recuperar la segunda parte del campo no lo recupera
bien


Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
response.write Mid(tso.ReadLine, 10, 3) & "<br>"
loop
tso.close

En este caso no lo recupera bien, me aparecen menos registros.

¿¿¿¿ Alguna solución ???

¿Hay algún método movefirst, movelast...?

Gracias.

Respuesta Responder a este mensaje
#2 Dani Castillo
08/08/2006 - 14:13 | Informe spam
Si el fichero no es "enorme" puedes hacer un readall de todo el contenido
sobre un string , luego el string ese lo divides con algo como
todo=fichero.readall()
variable=split(todo,vbcrlf)

que te lo dejara separado en un vector, ahi ya lo puedes recorrer
tranquilamente
for k=1 to length(variable)
...

"fpmweb" escribió en el mensaje
news:
Hola,

estoy leiendo un fichero txt con FileSystemObject, y me surge un problema.

El fichero dispone de varias lineas con infromación, por ejemplo:

AAADFSFSDFSD111111111Xasfas fasdfasdfdasfasd 00000002121213135afaasf
BBBDFSFSDFSD222222222asfas fasdfasd fdasfasd
00000002121213135afaasf
CCCDFSFSDSD222222222asfas fa sdfa fasdf asd d
00000002121213135afaasf

Ahora tengo que recorrer todo el txt, recuperar linea a linea y
formatearlo.
En definitiva preparar los campos para realizar un insert en la base de
datos.
Deberia quedar asi:

AAADFSFSDFSD
111111111
Xasfas fasdfasdfdasfasd
00000002121213135
afaasf


BBBDFSFSDFSD
222222222
asfas fasdfasd fdasfasd
00000002121213135
afaasf


CCCDFSFSDSD
etc

De esta forma recupero la linea, corto los trozos que necesito y voy
haciendo el insert en la BD para cada bloque (o linea). El problema surge
que
no lo recupera correctamente.

Tengo el siguiente código:

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
loop
tso.close


Aquí el primer response.write Mid(tso.ReadLine, 1, 9) & "<br>" lo recupera
bien,
pero cuando trato de recuperar la segunda parte del campo no lo recupera
bien


Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
response.write Mid(tso.ReadLine, 10, 3) & "<br>"
loop
tso.close

En este caso no lo recupera bien, me aparecen menos registros.

¿¿¿¿ Alguna solución ???

¿Hay algún método movefirst, movelast...?

Gracias.

Respuesta Responder a este mensaje
#3 Jhonny Vargas P. [MVP]
08/08/2006 - 14:45 | Informe spam
Lo mismo en Código VBScript para ASP sería.


Dim fso, tso, Linea

Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile("c:\temp\blabla.txt")

Linea = 0
Do Until (tso.AtEndOfStream)
strAux = tso.ReadLine 'coloco el valor de la línea en una variavel
Linea = Linea + 1
response.write "<b>Registro:" & Linea & "</b><br>"
response.write Mid(strAux, 1, 9) & "<br>"
response.write Mid(strAux, 10, 3) & "<br><br>"
Loop
tso.Close
Set fso = Nothing



PD: Perdon Nuno que interrumpa su respuesta.

Saludos desde Chile,
Jhonny Vargas P.



"Nuno Santos" <nunos7[REMOVE]@hotmail.com> escribió en el mensaje
news:%
No puedes hacer el readline várias veces dentro del ciclo... aqui te evio
un ejemplo en vb que hice...

file txt: (conteúdo del file teste.txt)
12345ABC012CDEFGH1
54321CBA210HGFEDC2

<codigo>
Private Sub Command1_Click()

Dim fso As New FileSystemObject
Dim tso
Set tso = fso.OpenTextFile(Me.Text1.Text)

Do Until (tso.AtEndOfStream)
strAux = tso.ReadLine 'coloco el valor de la línea en una variavel

Me.Text2.Text = Me.Text2.Text & Mid(strAux, 1, 5) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 6, 3) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 9, 3) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 12, 6) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 18, 1) & vbCrLf &
vbCrLf
Loop
tso.Close
Set fso = Nothing

End Sub

Private Sub Form_Load()
Me.Text1.Text = App.Path & "\teste.txt"
Me.Text2.Text = ""
End Sub
</codigo>
NS


Nuno Santos
nunos7[REMOVER]@hotmail.com

"fpmweb" wrote in message
news:
Hola,

estoy leiendo un fichero txt con FileSystemObject, y me surge un
problema.

El fichero dispone de varias lineas con infromación, por ejemplo:

AAADFSFSDFSD111111111Xasfas fasdfasdfdasfasd
00000002121213135afaasf
BBBDFSFSDFSD222222222asfas fasdfasd fdasfasd 00000002121213135afaasf
CCCDFSFSDSD222222222asfas fa sdfa fasdf asd d 00000002121213135afaasf

Ahora tengo que recorrer todo el txt, recuperar linea a linea y
formatearlo.
En definitiva preparar los campos para realizar un insert en la base de
datos.
Deberia quedar asi:

AAADFSFSDFSD
111111111
Xasfas fasdfasdfdasfasd
00000002121213135
afaasf


BBBDFSFSDFSD
222222222
asfas fasdfasd fdasfasd
00000002121213135
afaasf


CCCDFSFSDSD
etc

De esta forma recupero la linea, corto los trozos que necesito y voy
haciendo el insert en la BD para cada bloque (o linea). El problema surge
que
no lo recupera correctamente.

Tengo el siguiente código:

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
loop
tso.close


Aquí el primer response.write Mid(tso.ReadLine, 1, 9) & "<br>" lo
recupera
bien,
pero cuando trato de recuperar la segunda parte del campo no lo recupera
bien


Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
response.write Mid(tso.ReadLine, 10, 3) & "<br>"
loop
tso.close

En este caso no lo recupera bien, me aparecen menos registros.

¿¿¿¿ Alguna solución ???

¿Hay algún método movefirst, movelast...?

Gracias.





Respuesta Responder a este mensaje
#4 richi
08/08/2006 - 14:45 | Informe spam
En vez de leer linea a linea haz un tso.readall y cargas todo el
contenido en una variable.

Si cada linea es un registro puedes separarlos por el salto de linea, vbcrlf

Y dentro de cada registro los campos parecen estar separados por
tabulador, vbtab

Usa estos delimitadores para manejar los datos.

Saludos.


fpmweb wrote:
Hola,

estoy leiendo un fichero txt con FileSystemObject, y me surge un problema.

El fichero dispone de varias lineas con infromación, por ejemplo:

AAADFSFSDFSD111111111Xasfas fasdfasdfdasfasd 00000002121213135afaasf
BBBDFSFSDFSD222222222asfas fasdfasd fdasfasd 00000002121213135afaasf
CCCDFSFSDSD222222222asfas fa sdfa fasdf asd d 00000002121213135afaasf

Ahora tengo que recorrer todo el txt, recuperar linea a linea y formatearlo.
En definitiva preparar los campos para realizar un insert en la base de datos.
Deberia quedar asi:

AAADFSFSDFSD
111111111
Xasfas fasdfasdfdasfasd
00000002121213135
afaasf


BBBDFSFSDFSD
222222222
asfas fasdfasd fdasfasd
00000002121213135
afaasf


CCCDFSFSDSD
etc

De esta forma recupero la linea, corto los trozos que necesito y voy
haciendo el insert en la BD para cada bloque (o linea). El problema surge que
no lo recupera correctamente.

Tengo el siguiente código:

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" & "xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
loop
tso.close


Aquí el primer response.write Mid(tso.ReadLine, 1, 9) & "<br>" lo recupera
bien,
pero cuando trato de recuperar la segunda parte del campo no lo recupera bien


Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" & "xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
response.write Mid(tso.ReadLine, 10, 3) & "<br>"
loop
tso.close

En este caso no lo recupera bien, me aparecen menos registros.

¿¿¿¿ Alguna solución ???

¿Hay algún método movefirst, movelast...?

Gracias.

Respuesta Responder a este mensaje
#5 Nuno Santos
08/08/2006 - 15:29 | Informe spam
Estás perdonado :)

NS


Nuno Santos
nunos7[REMOVER]@hotmail.com

"Jhonny Vargas P. [MVP]" wrote in message
news:%
Lo mismo en Código VBScript para ASP sería.


Dim fso, tso, Linea

Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile("c:\temp\blabla.txt")

Linea = 0
Do Until (tso.AtEndOfStream)
strAux = tso.ReadLine 'coloco el valor de la línea en una variavel
Linea = Linea + 1
response.write "<b>Registro:" & Linea & "</b><br>"
response.write Mid(strAux, 1, 9) & "<br>"
response.write Mid(strAux, 10, 3) & "<br><br>"
Loop
tso.Close
Set fso = Nothing



PD: Perdon Nuno que interrumpa su respuesta.

Saludos desde Chile,
Jhonny Vargas P.



"Nuno Santos" <nunos7[REMOVE]@hotmail.com> escribió en el mensaje
news:%
No puedes hacer el readline várias veces dentro del ciclo... aqui te evio
un ejemplo en vb que hice...

file txt: (conteúdo del file teste.txt)
12345ABC012CDEFGH1
54321CBA210HGFEDC2

<codigo>
Private Sub Command1_Click()

Dim fso As New FileSystemObject
Dim tso
Set tso = fso.OpenTextFile(Me.Text1.Text)

Do Until (tso.AtEndOfStream)
strAux = tso.ReadLine 'coloco el valor de la línea en una variavel

Me.Text2.Text = Me.Text2.Text & Mid(strAux, 1, 5) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 6, 3) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 9, 3) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 12, 6) & vbCrLf
Me.Text2.Text = Me.Text2.Text & Mid(strAux, 18, 1) & vbCrLf &
vbCrLf
Loop
tso.Close
Set fso = Nothing

End Sub

Private Sub Form_Load()
Me.Text1.Text = App.Path & "\teste.txt"
Me.Text2.Text = ""
End Sub
</codigo>
NS


Nuno Santos
nunos7[REMOVER]@hotmail.com

"fpmweb" wrote in message
news:
Hola,

estoy leiendo un fichero txt con FileSystemObject, y me surge un
problema.

El fichero dispone de varias lineas con infromación, por ejemplo:

AAADFSFSDFSD111111111Xasfas fasdfasdfdasfasd 00000002121213135afaasf
BBBDFSFSDFSD222222222asfas fasdfasd fdasfasd 00000002121213135afaasf
CCCDFSFSDSD222222222asfas fa sdfa fasdf asd d 00000002121213135afaasf

Ahora tengo que recorrer todo el txt, recuperar linea a linea y
formatearlo.
En definitiva preparar los campos para realizar un insert en la base de
datos.
Deberia quedar asi:

AAADFSFSDFSD
111111111
Xasfas fasdfasdfdasfasd
00000002121213135
afaasf


BBBDFSFSDFSD
222222222
asfas fasdfasd fdasfasd
00000002121213135
afaasf


CCCDFSFSDSD
etc

De esta forma recupero la linea, corto los trozos que necesito y voy
haciendo el insert en la BD para cada bloque (o linea). El problema
surge que
no lo recupera correctamente.

Tengo el siguiente código:

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
loop
tso.close


Aquí el primer response.write Mid(tso.ReadLine, 1, 9) & "<br>" lo
recupera
bien,
pero cuando trato de recuperar la segunda parte del campo no lo recupera
bien


Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile ("C:\Inetpub\wwwrootssssp\eees\" &
"xxxx.txt")
do until (tso.AtEndOfStream)
response.write Mid(tso.ReadLine, 1, 9) & "<br>"
response.write Mid(tso.ReadLine, 10, 3) & "<br>"
loop
tso.close

En este caso no lo recupera bien, me aparecen menos registros.

¿¿¿¿ Alguna solución ???

¿Hay algún método movefirst, movelast...?

Gracias.









Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida