Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2022
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¿cómo podría agrupar datos de un TFDMemTable?

Hola

Estoy cargando datos desde un archivo CSV. Esto lo hago utilizando un TFDBatchMoveTextReader enlazado a su respectivo TFDBachMove y el contenido lo estoy colocando en un TFDBatchMoveDatasetWriter enlazado a un TFDMemTable. Y para mostrar el contenido, un Tdatasource y un TDBGrid. El contenido se lee y se muestra de manera correcta.

El detalle es que hay varios registros del mismo "socio" y de la misma "clave", por lo que tengo que sumar los montos para finalmente tener un solo registro por "socio" y "clave". Pero no tengo idea de cómo puedo agrupar el contenido que ya tengo en el TDFMemTable.

Código:
SOCIO    | CLAVE   | MONTO
------------------------------------
1            | D1        | 100
2            | D1        | 50
1            | D1        | 50
2            | D2        | 40

#Debería tener:

SOCIO    | CLAVE   | MONTO
------------------------------------
1            | D1        | 150
2            | D1        | 50
2            | D2        | 40
¿qué camino debería seguir para agrupar datos de un MemTable?
¿debería usar otro método para leer y agrupar el csv?

Saludos y de antemano gracias por sus ideas.
__________________

Responder Con Cita
  #2  
Antiguo 14-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No he utilizado mucho los componentes de FD, pero lo primero que se me ocurre es que utilizaras una tabla temporal para cargar los registros.
Una vez que los tengas en una tabla ya puedes generar las consultas necesarias para agrupar/sumar/...

Ya se que no es lo más directo, pero no se si todo lo que necesitas vas a poner hacerlo sólo usando tablas en memoria.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-03-2022
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 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
  #4  
Antiguo 17-03-2022
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Muchas gracias por sus aportaciones a ambos.

Voy a tomar la sugerencia de Neftali, la realidad es que pensé que sería más complicado, pero no lo fue tanto. Utilicé una tabla temporal y con algunos "ifs" y "locate" del dataset, pude agrupar la información de una tabla en otra tabla temporal.

Saludos y de nuevo gracias.

P.D. Hasta hoy me llegó la notificación a mi correo
__________________

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar TFDMemTable doctorhd Providers 3 10-12-2014 18:11:35
[rave report]¿como agrupar mis datos por fecha? PablorD Impresión 2 06-05-2010 21:40:37
Como agrupar datos por semanas flystar MySQL 1 06-06-2008 03:52:32
Como agrupar datos por semanas flystar MySQL 1 24-02-2008 19:14:29
Como agrupar datos de una tabla dabas Impresión 1 05-06-2003 16:20:47


La franja horaria es GMT +2. Ahora son las 16:47:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi