![]() |
![]() |
| Paypal | 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
|
||||
|
||||
|
si estas usando el codigo de daniel, la variable s es un string, los string (que es un alias de UnicodeString) en delphi si mal no recuerdo crecen hasta 2 gb, no sera ahi el problema?
archivos de 200mb no son muy grandes, yo hago la lectura usando el "old pascal i/o" y anda fenomenal, de hecho retroalimento la ui lo cual hace mas lento el procesamiento del archivo pero queda mas lindo ![]() Es mas hasta incluso cometo la "estupides" de contar la cantidad de lineas para poder mostrar algo como "procesado x/CantLineas % completado"
El archivo en cuestion tiene casi 200mb y unas 3,3 millones de lineas El proceso de arriba en cuestion, incluyendo el conteo de lineas, el procesamiento interno, el guardado en la BD y teniendo en cuenta que retroalimenta la gui me demora unos 2, 3 min Última edición por AgustinOrtu fecha: 30-10-2015 a las 06:27:16. |
|
#2
|
||||
|
||||
|
Hola Anel Hernandez
Como te menciona Agustín cuando los archivos son muy grandes es mas adecuado usar los procedimientos estandar de entrada/salida. El método LoadFromFile de la clase TStrings, carga la totalidad del archivo en la memoria y luego lo divide en líneas, haciendo que se duplique el consumo de memoria y a veces puede provocar fragmentaciónes en la misma. A cada variable de archivo de texto, Delphi le asigna un almacenamiento interno (buffer) de 128 bytes, por lo que usar el procedimiento SetTextBuff para modificar este valor, va a acelerar un poco el proceso. Reproduje la situación con cuatro archivos de 228 Mb en este ejemplo: Con un resultado en mi equipo de 76558319 µs ~ 76,55 s, tiempo mas que razonable. (*): Si deseas que siempre se sobreescriba el archivo destino, reemplaza las lineas entre comentarios por:
Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 30-10-2015 a las 22:18:43. Razón: sintáxis |
|
#3
|
|||
|
|||
|
hola,
estoy corriendo el ejemplo tal cual con 2 ficheros pequeños y con los nombres propuestos y da problemas. no adiciona lineas, sobreescribe a partir de determinadas lineas adicionada comienza a reescribir lineas anteriores. adjunto ficheros de ejemplo (p1.txt, p2.txt, total.txt). sustitui el while por un ciclo de 77 lineas adicionadas y da bien (total77.txt). luego cuando lo intento con 78 da error (total78.txt). llegue a estos numeros por tanteo. cual es el error? gracias A |
|
#4
|
||||
|
||||
|
Hola Anel.
En este ejemplo quité todos los ornamentos, genera los 4 archivos de texto, los concatena en otro y muestra el archivo en un memo:
Salida del ejemplo: ;
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#5
|
|||
|
|||
|
hola,
el ejemplo funciona perfectamente. El anterior logre que funcionara comentando la linea:
luego cambie las variables buffer y quedo como:
ya todo OK. 23 segundos y todo OK. gracias A |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Borrar una parte de un TStringList | eennzzoo | C++ Builder | 2 | 28-06-2014 14:04:13 |
| copiar el contenido de un TStringList a TSringGrid | GerTorresM | Varios | 1 | 02-07-2010 18:38:41 |
| copiar la parte seleccionada de un imagen | fasthorse | C++ Builder | 4 | 14-05-2008 20:05:03 |
| Copiar parte de la pantalla.... | craven | Gráficos | 2 | 27-08-2003 22:53:01 |
| Copiar Parte de un BMP a otro | craven | API de Windows | 1 | 07-07-2003 10:45:34 |
|