FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como hacer para totalizar una columna de un stringgrid por valor
Hola foristas, la siguiente duda es acerca de trabajar con los stringgrid, me piden leer un txt el cual trae una inmencidad de datos, lo cual ya realice. Luego me piden que si puedo dar los datos mas resumidos, es decir, que por numero de autorizacion el cual se guarda en la primera columna. Al implementar este codigo el cual y segun yo no iva a tener ningun tipo de problema me encuentro con que me da error de Out of index justamente al entrar en la parte del codigo en rojo he intentado ver el porque y no he dado con el problema. utilizo Delphi 7, tadvstringgrid de los componentes Devexp.
|
#2
|
||||
|
||||
El problema parece estar en que DataGridAgrupado no está inicializado y tiene 0 filas.
Luego FilaActual = 0 En la siguiente linea le dices que guarde en la linea -1 (FilaActual-1) un valor. Quizás deberías mover la línea que inserta una nueva línea al principio.
|
#3
|
|||
|
|||
Ok gracias probaré, pero por demas ambos stringgrid traen por default 2 filas una para la fixed row (que es el encabezado) y una fila mas sino tedeja el fixed row como si fuera una fila normal
|
#4
|
|||
|
|||
Ya lo intente pero aun asi me dice Index out of range
|
#5
|
|||
|
|||
Ok problema de index out range resuelto, pero aun me falta mejorar la rotura de total por el valor de la columna 0, Gracias por la ayuda
|
#6
|
|||
|
|||
Bueno el codigo anterior no da ningun error ahora, pero tampoco me coloca nada en el grid solo aparecen una cantidad x de filas en blanco
|
#7
|
|||
|
|||
T_T una ayudita con esta parte
Ok, todo marcha como quería excepto por un error que no se si tiene solución. Explico: cargo un archivo txt sin separación (no csv, no tab) en un memo (todo bien), luego obtengo los datos que me interesan con Copy(componente, posición,cantidad) perfecto, ya con estos datos los paso a un grid (stringgrid de Devexp tadvsringgrid) todo de maravilla, como existen datos repetidos por un valor x debo dar un total para ese registro (wow cuanto me tomo pero listo....ah gracias por la ayuda :P). Acá es donde viene el error cuando estoy creado en la nueva stirnggrid los valores acumulado obtengo un Outmemory y se rompe todo el proceso es decir me quedo sin memoria para seguir procesando. No se como solucionar esto si necesitan código completo para analizar y optimizarlo no hay ningun problema es un trabajo que debo tener listo para poder procesar los datos enviados de una aseguradora y no digitar toda esa información la cual es mucha tanto así que excel no carga el archivo completo.
|
#8
|
||||
|
||||
Agrega este metodo, para crear un log a un fichero que se llame igual que la aplicación, pero con extensión .log
Ten en cuenta que agregará (Append) lineas. Deberás borrarlo cada vez que lo ejecutes. Luego agrega llamadas a este metodo
Supongo que verás que de alguna manera FilaActual se sale de control y toma un valor muy alto, creando esa cantidad de filas. |
#9
|
|||
|
|||
Muchas gracias duilioisola por esas lineas ya se como hacer un log file gracias a usted.
Pero la cantidad de lineas inmensas vienen del txt original pero se carga facil en el memo y cuando ejecuto el primer proceso que se encarga de dividir los valores tomar los que necesito y colocar el punto decimal en la posicion correcta no da problema. ahora cuando estoy realizando el segundo paso que seria totalizar esa informacion por numero de autorizacion en cierto punto da el error de outmemory. te pasare el codigo completo incluyendo el archivo si deseas |
#10
|
|||
|
|||
Aca esta el codigo completo
|
#11
|
|||
|
|||
No puedo enviar el archivo txt ya que el tamaño excede el maximo permitido
|
#12
|
||||
|
||||
¿Haz probado a importar solo una pequeña parte del fichero?
Copia 10 o 20 lineas del txt original (o el número que tenga sentido) a un txt de prueba y ves qué pasa con el log. |
#13
|
|||
|
|||
Ya te envie todo, pero si he probado y no me da error sin cancelo el proceso y tengo pocos registros. Lo malo es que es un archivo inmenso y debe trabajarse por completo no lo envían por partes.
|
#14
|
||||
|
||||
Parece que tienes un problema de capacidad de memoria.
No tengo el componente que utilizas (TAdvStringGrid), pero parece que tiene algunas funcionalidades que el TStringGrid no tiene. En especial la de AddRow. Esto me hace suponer que también debe tener DelRow o algo para borrar una línea. Veo que tienes dos StringGrids, pero que solo necesitas uno a la vez. Lo que puedes probar es llenar uno mientras vacías el otro. Puedes hacer la siguiente prueba:
Nota: No se como estará implementado DataGrid.DelRow. Quizás debas pasarle el nro de línea a borrar. En este caso sería la 1. DataGrid.DelRow(1); |
#15
|
|||
|
|||
Ok voy a implementar las lineas a ver
|
#16
|
||||
|
||||
He estado jugando un poco con el código y he creado esta función, que creo que hace lo que tu necesitas, pero no lo va pasando de Memo en Memo...
La única interacción que tiene con el formulario es el Label que cuenta las líneas. Si quitas eso y el Application.ProcessMessages será mucho más rápido. He creado un botón llamado ButtonAgrupar y le he puesto el código. No utiliza StringGrids, que son visuales, por lo que no utiliza tanta memoria. De todos modos carga el texto en un TStringList. Es fácilmete modificable para no utilizar nada de memoria, abriendo el archivo origen y escribiendo en el archivo destino mediante Readln(F, s); y Writeln(F, s); Espero que te sirva.
|
#17
|
||||
|
||||
Con este procedimiento he logrado procesar los 177000 registros
Solo he tenido que controlar que el valor de monto se pudiera convertir mediante
También he hecho la prueba de copiar y pegar dos veces el text con 354000 lineas. También lo pude tratar en una máquina virtual con 384 MB de RAM. |
#18
|
|||
|
|||
Si muchas gracias el codigo funciona de maravillas, con la except que cuando un valor en la linea falta y esta rueda los valores que toma son diferentes. he tratado de controlarlo pero los casos varian a veces son 10 spacios o 5 spacios menos.
|
#19
|
|||
|
|||
tambien me añade la ultima fila mal
|
#20
|
||||
|
||||
Este es el formato de tu fichero:
La línea de en medio es una que tiene una longitud incorrecta porque falta un dato en medio. Código:
1 2 3 4 5 6 7 8 9 0 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 F------F A-------------A M------------MN------------------------------------------------------------------------------N 0420000033011201203004457 29 12546964 A010010010100001516000000000366700PORTORREAL GIL RODNER FRANCISCO MED001 0420000033011201203004457 29 12546964 A010010010100001516000000000366700PORTORREAL GIL RODNER FRANCISCO MED001 042000003301120120 12607904 A010010010100001516000000000037500PORTORREAL GIL RODNER FRANCISCO S20001 0420000033011201204000000000 12647953 A010010010100001516000000000038900QUEZADA DE CABRERA ORIA ESTHER 881201 0420000033011201204000000000 12647953 A010010010100001516000000000038900QUEZADA DE CABRERA ORIA ESTHER 881340 La primera verificación, antes de procesarla deberá ser comprobar la longitud. Si no es correcta, deberas descartarla y enviar un mensaje o advertencia o lo que sea necesario hacer. Además de esto, veo que estas desfasado 1 caracter a la izquierda con respecto al campo AUTORIZACION. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Hacer que una columna de un DbGrid aparezca distinta según valor | Aprendiendo | OOP | 11 | 30-11-2018 14:47:20 |
Problemas con Totalizar una columna de un DBGrid | JoAnCa | Conexión con bases de datos | 2 | 22-08-2008 15:55:20 |
Hacer readonly una columna en stringgrid | zcatzz | Varios | 5 | 26-09-2007 16:59:50 |
Como hacer para que el ancho de una columna de un TListView permanezca inalterable | abracadabra | OOP | 17 | 01-10-2005 00:33:35 |
como hacer que una columna del dbgrid contenga un valor de un TEdit en cada celda | Shidalis | OOP | 2 | 02-08-2005 12:05:35 |
|