BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Abrir fichero txt enorme (69 MB)

fro2

Hola, por motivos de trabajo debo de abrir un fichero txt que ocupa 69 mb, y que tiene una estructura de 25000 filas con 1000 caracteres por fila.

En cada fila tengo que separar cada una de las columnas de acuerdo con una guia, por ejemplo:

Caracter del 1 al 50 (NOMBRE Y APELLIDOS)
Caracter del 51 al 60 (DNI).
etc... así hasta el caracter 1000

He intentado exportara Excel sin éxito,
Lo mismo con Acces.

No se como abrirlo ni como poder extraer estos datos "ordenados", agradezco cualquier ayuda o idea.

Gracias.

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
jmoraf

Pero.. ¿con Excel no puedes importar utilizando campos de longitud fija (ya sabes dónde está cada campo)?

Según lo que quieras hacer, podrías hacer en PHP un programita para poner todo eso en una BBDD mysql, y luego.. consultas lo que quieras con phpmyadmin.. por decir algo en "forma web"..

🗨️ 2
fro2

Excel se me cuelga al intentar abrir ese fichero.
Debe ser por el tamaño.

🗨️ 1
Frankie2004

Access tal vez podría hacerlo. Es más serio para ese tema.
Edito: Perdón, no había leído que lo habías intentado con Access.
¿Qué versión de Office tienes instalada? ¿Qué sistema operativo? ¿Cuánta memoria tienes en el PC?

Amanecer

Hola:

Ahora mismo se me ocurren dos fórmulas para hacerlo:

1. Puedes usar un editor de MS-DOS llamado Aurora Editor que permite la apertura de ficheros del tamaño de la memoria de tu ordenador y una especie de scripting mediante el que podrías transformar tu fichero en fichero .CSV con los campos separados por tabuladores y ese fichero lo podrías abrir con el Excel.

2. Usando la hoja de cálculo de la OpenOffice, paquete ofimática libre y gratuita, siguiendo estos pasos:
a) Renombras tu archivo de texto de modo que tenga la extensión .csv.
b) Cargas la OpenOffice.Calc
c) Pulsas [Ctrl][A] para abrir tu archivo, lo seleccionas
d) Te aparece la ventana 'Importar texto'
e) En "Opciones de separación", marcas "Ancho fijo"
f) En el gráfico "Campos" marcas manualmente los límites de las columnas en la regla
g) Cuando lo tengas pulsas el botón Aceptar
h) Compruebas que todo está correcto en las celdas, sino cerrar el documento y repetir desde c) porque Calc se acuerda de las columnas
i) Cuando lo tengas todo OK, lo puedes grabar en formato Excel usando la opción "Guardar como".

Suerte.

🗨️ 2
Pacinside

Cómo estás tan seguro que Calc de OpenOffice sí podrá abrir el archivo, cuando su límite de filas es de 32k, frente a las 65k que puede abrir Excel ?

...hablando de todo, tampoco entiendo como Excel no permita abrir un archivo de 12k filas. Será por el número de campos (columnas), imagino...

PD: Que conste que no pretendo hacer propaganda de uno u otro.

🗨️ 1
Amanecer

Hola:

No estoy seguro de que pueda, simplemente intento darle alternativas para que no se quede parado, yo tampoco intento hacer propaganda.

Quizás Excel sí que es capaz de abrir el archivo, pero en una máquina con más memoria (virtual, no necesariamente física) o necesita tanto tiempo para procesar la apertura que nosotros no somos capaces de esperar.

También puede aplicar la técnica del "divide y vencerás", con un editor "sin limitaciones de tamaño", como el Aurora que proponía, puede fragmentar el archivo en varios de menor número de líneas y volver a probar con el Excel.

Saludos.

yomimmo

¿1000 caracteres en cada linea de texto?
Veo dificil que el excel o el acces te lo importen desde formateo texto creo recordar que el limite de caracteres por linea en el fichero de texto a importar es banstante mas pequeño, o al menos hace tiempo era asi.

GarabaTTo

QuarkXPress (documento nuevo, importar texto y aplicarle tabuladores)

BocaDePez
BocaDePez

Eso lo arreglas con un BATillo...

------INICIO FICHERO BAT-------
@ECHO OFF
Copy Nul fichero_salida.txt>Nul

For /F "delims==" %%L in ('type fichero.txt) do Call :Parse "%%L"

Echo Fichero procesado.
GOTO:EOF

:Parse
Set Linea=%1

REM Eliminamos comillas insertadas al principio y final de la linea, para delimitar que %%L sea tratado como único parámetro
Set Linea=%Linea:~1,-1%

Set NomApell=%Linea:~0,49%
Set DNI=%Linea:~50,59%
REM ...así, sucesivamente.

REM Luego añades, por ejemplo...

Echo %NomApell%,%DNI%,%etc....% >> fichero_salida.txt

GOTO:EOF
--------------FIN FICHERO BAT----------

Con esto lo que tienes es un fichero llamado FICHERO_SALIDA.TXT con los campos separados por comas. Como ves, es muy sencillo adaptarlo a las necesidades que tengas y al formato de salida. El número de filas no es problema.

🗨️ 3
BocaDePez
BocaDePez

Perdón, donde :Parse es (dospuntos)Parse

Marditos smilies....

🗨️ 1
BocaDePez
BocaDePez

Puedes desactivar los smilies en la casilla que está debajo de la ventana para escribir el post.

Pacinside

Este era yo, sin logear.

Saludos.

BocaDePez
BocaDePez

Ultraedit bajo windows

Lo pones en modo columna y copias la estrutura que quieras y lo pegas a un excel o lo que desees... yo ya he abierto ficheros mas grandes, logs de errores y que estaban en un servidor (ya sea unix o windows) lo que aun lo relentiza mas...

Eso si, un poco lento ira todo y de forma artesanal. Se agradecera hacerlo en una maquina con gran cantidad de memoria para paginar esos megas. Luego queda cortar y pegar a una hoja excel por campo seleccionado.

Otra opcion podria ser un un programa C o bajo linux ejecutar un shell que trocee la entrada el fichero y le de un formato de salida adecuado para que la salida (otro fichero de texto con delimitadores explicitos tipo "campo1","campo2",....) sea facilmente interpretable por la hoja excel y no se queje.

Excel deberia abrirlo, tiene la limitacion de 65.000 y pico lineas 2^16 pero deberias ser capaz de leer un formato fijo e importar la estructura que tu definas, seguro que no estas jugando con lineas de longitud variable, separadas por tabuladores, comas, etc?

BocaDePez
BocaDePez

No habia leido el *.bat de arriba sera una solucion interesante y menos farragosa...

Prueba a salvar un par de lineas en otro fichero y haz un bat. sencillo con dos o tres campos y el tocho restante a un campo grande ...

Si consigue separte en el fichero de salida en los 3 campos y el campo tocho, teclea el resto de la estructura en el bat.

Lo que no logro entender es lo que dices... 25.000 lineas de 1.000 caracteres serian menos de 25 Mb... no 69 Mb??? No estara el texto en Unicode? y aun asi.... otras 19 Mb extras...

🗨️ 2
fro2

Es que son 50000 no 25000, lo que pasa que son 2 lineas por evento, yo contaba 25600 eventos pero x2 son 51200 eventos con 1000 caractere spor linea.

Y si, es texto plano.

Voy a probar la opcion ultraedit.

Tambien estoy haciendo pruebas con VBA sobre access. Un poco mas farragoso.

🗨️ 1
BocaDePez
BocaDePez

Ahora en el curro lo tengo delante y creo que hay mas posibilidades con el Ultraedit, es bastante recomendable....

Menu Column-> Column Mode para seleccionar columnas y hacer Cut & Paste.

o Mucho mas facil...

Menu Column -> Convert to Character Delimited

Te sale una ventanita, le especificas el delimitador... por ejemplo la coma , y abajo pones las longitudes a partir...
30,2,13,100, etc...

Y luego te lo transforam en algo asi

Pepe Perez ,21, 11.416.821D ,c/juan almagro nº 20 .... etc

Si pones comillas como separador quedaria como

"Pepe Perez ","21", "11.416.821D ","c/juan almagro nº 20 ...." etc
Que esto supongo es facilmente importable por excel...

OJO... que los datos no contengan COMA o comilla... (haz un Alt + F3 para buscar comas por si acaso) sino deberas establecer otro delimitador como \t el tabulador que no creo que exista en un fichero plano...

Saludos y suerte