............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Importar un archivo txt con delimitadores diferentes

Ver el tema anterior Ver el tema siguiente Ir abajo

Importar un archivo txt con delimitadores diferentes

Mensaje por danielvavi el Mar Mayo 24, 2011 3:05 pm

Saludos,

Es mi primer post, asi que espero hacerlo bien

Veran, necesito hacer una macro que importe un archivo .txt a una hoja de excel, el problema esta en que no se como configurarle los delimitadores porque quiero separar las celdas cada ",,," (tres comas seguidas).

Espero haber sido claro y de antemano Gracias

danielvavi

Masculino Cantidad de envíos : 2
Edad : 30
Ciudad - Pais : Mexico
Version de Excel : 2007
Fecha de inscripción : 24/05/2011

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por Tatayayan el Mar Mayo 24, 2011 11:47 pm

hola, esta macro permite abrir un archivo txt:

Sub AbrirTXT()
On Error Resume Next
Dim Archivo As String
Archivo = Application.GetOpenFilename(FileFilter:="(Archivo de Texto (*.txt), *.txt)", Title:="Elija txt")
Workbooks.OpenText Archivo
On Error GoTo 0
End Sub
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Miér Mayo 25, 2011 12:39 am

Código:


Sub AbrirTXT()
On Error Resume Next

Dim Archivo As String
dim Contenido as string
dim Lineas as string
dim Celdas as string
dim i as long
dim e as long
dim wb as workbook

Archivo = Application.GetOpenFilename(FileFilter:="(Archivo de Texto (*.txt), *.txt)", Title:="Elija txt")

if dir(archivo)<>"" then

open archivo for binary as 1
contenido = space(lof(1))
get #1,,contenido
close 1

set wb = workbooks.add(1)

lineas = split(contenido,vbcrlf)

for i = 0 to ubound(lineas)
 celdas = split(lineas(i),",,,")
 for e = 0 to ubound(celdas)
  wb.sheets(1).cells(i+1,e+1) = celdas(e)
 next
next

set wb=nothing

end if

End Sub



P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por danielvavi el Miér Mayo 25, 2011 2:23 pm

Excelente, Muchisimas gracias

danielvavi

Masculino Cantidad de envíos : 2
Edad : 30
Ciudad - Pais : Mexico
Version de Excel : 2007
Fecha de inscripción : 24/05/2011

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por Tatayayan el Miér Mayo 25, 2011 4:25 pm

Hola P@li, me podría explicar esta parte:
open archivo for binary as 1
contenido = space(lof(1))
get #1,,contenido
close 1
la entiendo a medias, otra en la siguientes líneas me dió error,
lineas = split(contenido,vbcrlf) ' linea no es un string?, ua se que la función crea una estructura de datos, pero esa variable esta declarada como string

for i = 0 to ubound(lineas) 'precisamente acá medio el error, anulé el As string y "corrió" similar para celdas.

avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Miér Mayo 25, 2011 6:30 pm

Hola Tatayayan!
Primero te explico la parte que comentaste, VBA tiene la posibilidad de abrir archivos binarios para no perder caracteres especiales, y montar su contenido en una variable, al archivo lo podemos leer por "lotes" por así decirlo, o lo podemos leer completo (como lo hice yo).

open archivo for binary as 1

Open es la función que abre el archivo
Archivo es el path completo del archivo a abrir
For Binary, aunque también puede ser For Imput o For Output, leer al respecto.
As 1, es el número de archivo libre para abrir, si abrieramos dos archivos al mismo tiempo tendríamos que hacerlo con dos números distintos. En el caso que abrieramos múltiples archivos perdiendo la cuenta de los números usados, con la función freefile podemos saber un número disponible de archivo. Igual siempre recomiendo cerrar los archivos en el mismo procedimiento.

contenido = space(lof(1))

La otra línea amplía la variable Contenido hasta la longitud exacta de bytes que tiene el archivo.
Lof, Len Of File (otros dicen Long Of File, es lo mismo) nos da la longitud del archivo en bytes.
Space, esta función multiplica tantos espación como se indica en el parámetro
Si esta variable fuera de un tamaño menor a la longitud del archivo obtendriamos hasta el byte que llegara la cantidad de caracteres que tuviera. Si Contenido tiene 20 caracteres, y el archivo 25 bytes, obtendriamos los primeros 20 bytes del archivo.

get #1,,Contenido

Get, se encarga de tomar los datos del archivo y volcarlos en nuestra variable
#1, el primer parámetro es el número de archivo
el segundo es un parámetro opcional que determina a partir de qué byte queremos recuperar datos
Contenido, el tercer parámetro tiene que ser una variable de tipo string o un array de byte con la longitud que queremos recuperar.

Close 1

Sencillamente cierra el archivo que se indica en el primer parámetro, si no se pasa ningún número de archivo la función cierra todos los archivos abiertos.


Ahora paso al otro punto, si escribiendo la función me equivoqué y puse As String, en realidad las variables FILAS y CELDAS no tienen que ser definidas con un tipo, o bien debería declararlas como Variant

Código:


Sub AbrirTXT()
On Error Resume Next

Dim Archivo As String
dim Contenido as string
dim Lineas
dim Celdas
dim i as long
dim e as long
dim wb as workbook

Archivo = Application.GetOpenFilename(FileFilter:="(Archivo de Texto (*.txt), *.txt)", Title:="Elija txt")

if dir(archivo)<>"" then

open archivo for binary as 1
contenido = space(lof(1))
get #1,,contenido
close 1

set wb = workbooks.add(1)

lineas = split(contenido,vbcrlf)

for i = 0 to ubound(lineas)
 celdas = split(lineas(i),",,,")
 for e = 0 to ubound(celdas)
  wb.sheets(1).cells(i+1,e+1) = celdas(e)
 next
next

set wb=nothing

end if

End Sub


Desde ya gracias por interesarte en probar el código y avisarme del error. Espero que hayas entendido mi explicación bastante básica respecto de las líneas que me consultaste.

Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Miér Mayo 25, 2011 6:37 pm

Adelantandome a la posible consulta, para escribir usando la misma operación de apertura del archivo como binario, tenemos que hacer lo siguiente:

Código:

dim output as string
output = "hola mundo!"

open "C:\prueba.txt" for binary as 1
put #1, , output
close 1



Saludos,
Pablo

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por GalileoGali el Jue Mayo 26, 2011 12:38 am

Calidad vs cantidad, cada dia estoy más orgulloso de nuestro foro. Tal vez la participacion no es mucha, peroa diario se inscriben no menos de 10 excelianos.

Gracias por preguntar, gracias por responder. Aqui va casi un tutorial espontaneo sobre manejo de archivos planos. Y ya que pasaba por aca, resalto un detalle de la explicacion de P@li:

VBA tiene la posibilidad de abrir archivos binarios para no perder caracteres especiales, y montar su contenido en una variable, al archivo lo podemos leer por "lotes" por así decirlo, o lo podemos leer completo (como lo hice yo).

¿No se plantea ningun obstaculo en tu codigo si el entorno operativo es Wimdows de 64 bites?

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por Tatayayan el Jue Mayo 26, 2011 10:35 am

Hola p@li, quise lo fácil, pero me puse a leer y es tal cual lo explicas. Muchas Gracias. Trabaje con txt pero no del modo que explicas.
Salu2.xlsm
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Jue Mayo 26, 2011 10:47 am

Gali, prometo responder a tu pregunta en cuanto pueda probar el código en mi notebook, la compré hace un par de días y tiene Window 7 64 bites.

Creo que es la forma más sencilla de trabajar con txt más bien chicos, o también para importar datos de archivos pdf, (cuando no están codificados), o de txt que no tienen estructura de base de datos pero siguen siempre un mismo parámetro con respecto a su formato.

Si es para guardar configuraciones del programa yo prefiero usar archivos INI.

En cambio, si lo que necesito es trabajar con una buena cantidad de registros, prefiero usar ADO, lo único difícil de esto es configurar el archivo schema.ini para la correcta lectura de la base de datos, lo único malo es que no se pueden editar registros, solamente leer o insertar nuevos. Voy a ver si puedo hacer un tuto de esto si es que no alguno en el foro de bases de datos.


Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por GalileoGali el Jue Mayo 26, 2011 10:33 pm

va a ser material de consulta de muchisima gente, vere la posiblidad de agregar "tags" bien específicas que orienten a los buscadores

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Vie Mayo 27, 2011 9:45 am

Acá dejo una explicación de cómo abrir archivos txt como si fueran bases de datos, para los formatos de "tamaño fijo" y "delimitado por un caracter".
[Tienes que estar registrado y conectado para ver este vínculo]

Y dejo este link que es donde aporté una clase para trabajar con archivos INI.
[Tienes que estar registrado y conectado para ver este vínculo]

Todavía no prueba el código en mi note, en breve te comento como funciona eso.

Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Sáb Mayo 28, 2011 6:39 pm

Gali,
Probé el código en Windows 7 64bites y funciona correctamente.

Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por TREBUR el Mar Jun 28, 2011 10:25 pm

Código:


Sub AbrirTXT()
On Error Resume Next

Dim Archivo As String
dim Contenido as string
dim Lineas
dim Celdas
dim i as long
dim e as long
dim wb as workbook

Archivo = Application.GetOpenFilename(FileFilter:="(Archivo de Texto (*.txt), *.txt)", Title:="Elija txt")

if dir(archivo)<>"" then

open archivo for binary as 1
contenido = space(lof(1))
get #1,,contenido
close 1

set wb = workbooks.add(1)

lineas = split(contenido,vbcrlf)

for i = 0 to ubound(lineas)
 celdas = split(lineas(i),",,,")
 for e = 0 to ubound(celdas)
  wb.sheets(1).cells(i+1,e+1) = celdas(e)
 next
next

set wb=nothing

end if

End Sub


Tú código funciona bien, pero probándolo en éste TXT descuadra algunos montos, osea, no los coloca tal cual aparecen...

Archivos
Recibo.TXT No tienes los permisos para descargar los archivos.(2 KB) Descargado 35 veces

TREBUR

Masculino Cantidad de envíos : 3
Edad : 34
Ciudad - Pais : VENEZUELA
Version de Excel : 2003-2007
Fecha de inscripción : 27/02/2011

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por msylvestre66 el Miér Jun 29, 2011 2:02 pm

Lo genial de excel, es que simpre existen mas de dos posiblidades de respuesta.
Una opcion mas simple (por lo menos para mi) es usar el importador de texto del mismo excel.
Aqui dejo un manualito de como usarlo.
sobretodo para los que sabemos poco o nada de macros.

[Tienes que estar registrado y conectado para ver este vínculo]


avatar
msylvestre66

Masculino Cantidad de envíos : 79
Edad : 54
Ciudad - Pais : Estado de México
Version de Excel : W8 Excel 2007 y 2010
Fecha de inscripción : 18/06/2009

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por P@li el Miér Jun 29, 2011 2:16 pm

No lo divide porque en tu caso no están separados los campos por ",,,", creo que la separación esta determinada por cantidad de carateres, el código se puede modificar para que lo haga pero te digo la verdad, y no te enojes, en este momento no tengo tiempo para hacerlo.

Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por TREBUR el Miér Jun 29, 2011 10:47 pm

Ok, gracias...

TREBUR

Masculino Cantidad de envíos : 3
Edad : 34
Ciudad - Pais : VENEZUELA
Version de Excel : 2003-2007
Fecha de inscripción : 27/02/2011

Volver arriba Ir abajo

Re: Importar un archivo txt con delimitadores diferentes

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.