Ver Mensaje Individual
  #3  
Antiguo 14-03-2022
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Reputación: 8
manelb Va por buen camino
No sé si puede resolver tu problema, pero es posible abrir el fichero csv directamente con un FDConnection y un FDQuery.
Podrías prescindir del TFDBatchMoveTextReader, TFDBachMove, TFDBatchMoveDatasetWriter y TFDMemTable.

Desde hace un tiempo trato todos los ficheros de texto directamente con Firedac.

Las opciones del driver de texto son realmente espectaculares, y te permiten, a partir de cualquier fichero de texto (ya sea tabulado, espacios fijos, separado por carácter, etc, dar formato a cada una de las columnas, y tratar el fichero como cualquier tabla de datos, recuperando las filas con una simple consulta sql y aprovechando todas las características de cualquier consulta sql (joins, clausulas where , group by , etc…).


Estos días he estado trabajando con un fichero del INE correspondiente al callejero del estado Español y contiene 1.469.727 registros y una longitud de registro de 280 caracteres.
El fichero ocupa poco más de 400 MB, y se abre de forma instantánea.
Por supuesto que, siguiendo la filosofía de Firedac en su configuración por defecto, sólo recupera los primeros registros y a partir de aquí va paginando y recuperando bloques de datos a medida que avanzamos por el dataset.

La gran potencia del sistema reside en la posibilidad de que exista, junto con el fichero de datos, un fichero con el nombre schema.ini, que contiene la definición de la estructura del fichero de datos en cuestión.
https://docs.microsoft.com/es-es/sql...l-server-ver15

El schema.ini para el fichero de callejero que os estoy comentando seria el siguiente:
Código:
[TRAMOS_NAL_F210630.txt]
ColNameHeader=False
;Format=CSVDelimited
Format=FixedLength
MaxScanRows=0
CharacterSet=ANSI
Col1=CodProvincia Text Width 2
Col2=CodMunicipio Text Width 3
Col3=XXX Text Width 37
Col4=CodPostal Text Width 5
Col5=XXXX Text Width 63
Col6=Nombre Text Width 25
Fijaos que, aunque la longitud del registro sea de 280 caracteres, nos podemos limitar a extraer solamente la información que nos interese, y en la columna 3 i 5 agrupo datos que no necesito.

Si te interesa, me mandas unos ficheros csv de muestra y te preparo un ejemplo.

Saludos a todos
Responder Con Cita