Leer un archivo txt

28/09/2004 - 21:47 por ZBB | Informe spam
Tengo una macro que necesita leer una lista de dos
columnas, ejemplo
V1,U1
V2,U2

Vn,Un
almacenadas en un archivo de textto de extension .txt.
Como hago para que la macro abra el archivo y cargue en 2
matrices V(n), U(n) los datos contenido en el archivo txt
Si alguien me da una pista, muchas gracias

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
29/09/2004 - 16:48 | Informe spam
Prueba con el siguiente código, pero ten en cuenta que para que funcione tendrás que establecer una referencia a la biblioteca "Microsoft ActiveX Data Objects X.x Library" (donde X.x es la versión más moderna que tengas). Esto se hace desde Herramientas->Referencias, estando en el editor de VBA.

Sub prueba()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim V() As String, U() As String
Dim n As Long

Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\;" & _
"Extended Properties=""text;HDR=No;FMT=Delimited"""

Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM prueba.txt", cn, adOpenStatic, adLockReadOnly, adCmdText

ReDim V(1 To rs.RecordCount)
ReDim U(1 To rs.RecordCount)

rs.MoveFirst
For n = 1 To rs.RecordCount
V(n) = Left(rs(0), InStr(rs(0), ",") - 1)
U(n) = Mid(rs(0), InStr(rs(0), ",") + 1)
rs.MoveNext
Next n

'
'Ahora las matrices V y U tienen la 1ª y 2ª "columna" del archivo de texto
'

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub


En principio el "proveedor" OLEDB debería ser capaz de crear el recordset con dos campos él solito, basándose en las comas como delimitadores, pero el hecho es que a mí no me ha funcionado esto, razón por la cual es el código quien se encarga de dividir el registro en dos campos. Si a ti sí te crea los dos campos, sería necesario modificar el código, algo como:

For n = 1 To rs.RecordCount
V(n) = rs(0)
U(n) = rs(1)
rs.MoveNext
Next n

aunque no estoy seguro de que el código anterior sea correcto, dado que no puedo probarlo.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"ZBB" escribió en el mensaje news:0e7b01c4a594$007818b0$
Tengo una macro que necesita leer una lista de dos
columnas, ejemplo
V1,U1
V2,U2

Vn,Un
almacenadas en un archivo de textto de extension .txt.
Como hago para que la macro abra el archivo y cargue en 2
matrices V(n), U(n) los datos contenido en el archivo txt
Si alguien me da una pista, muchas gracias

Respuesta Responder a este mensaje
#2 cleo_aral
30/09/2004 - 09:22 | Informe spam
ZBB wrote:

Tengo una macro que necesita leer una lista de dos
columnas, ejemplo
V1,U1
V2,U2
.
Vn,Un
almacenadas en un archivo de textto de extension .txt.
Como hago para que la macro abra el archivo y cargue en 2
matrices V(n), U(n) los datos contenido en el archivo txt
Si alguien me da una pista, muchas gracias





Yo te propongo otra manera un poco más secilla quizá, dado que tu archivo
es de texto.

Para abrir el archivo de texto des de la macro de VBA usa:

Open "ruta del archivo" For Input As #1
'#1 puede ser un número entero cualquiera. Podrás hacer referencia a ese
archivo partir de aquel momento mediante ese número

Dim linia As String
Line Input #1, linia 'esto lee una linia del archivo #1 i la variable
linia contiene el texto

Para separar las dos variables puedes usar por ejemplo algo como:

**********
Linia=Trim(linia)'eliminamos los espacios en blanco por delante y detrás
i=1

While IsNumeric(Mid(linia, i,1))
i=i+1
Wend
U(n)=Mid(linia,1,i -1)

While Not IsNumeric(Mid(linia, i, 1))
i = i + 1
Wend
j = i
While IsNumeric(Mid(linia, j + 1, 1))
j = j + 1
Wend
V(n) = Mid(linia, i + 1, j - i)
***********


Todo esto lo haces dentro de un While que controle que no se acabe el
fichero:
n=1
Line Input #1, linia
While EOF(#1)
****texto anterior donde leamos la linia y guardemos las varibles***

n=n+1
Line Input #1, linia
Wend
'Y leemos la última linia q queda pendiente:
Linia=Trim(linia)
i=1
While IsNumeric(Mid(linia, i,1))
i=i+1
Wend
U(n)=Mid(linia,1,i -1)

While Not IsNumeric(Mid(linia, i, 1))
i = i + 1
Wend
j = i
While IsNumeric(Mid(linia, j + 1, 1))
j = j + 1
Wend
V(n) = Mid(linia, i + 1, j - i)


Espero que te sirva como ejemplo un poco de lo que se puede hacer,
he supuesto qie leías numeros sino no uses la función: IsNumeric
Y vigila si los numeros llevan decimales, tienes q retocar el código o no
te lo leerá bien.

Suerte

Cleo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida