FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Caramba!! Agradezco enormemente el tiempo que has invertido al atender mi duda. Aún no implemento lo que has indicado, pues estoy primero revisando que el proceso que hago a los datos son correctos, para enseguida escribirlos y leerlos. En cuanto haya terminado de verificar estas cosas, haré saber los resultados. Saludos y nuevamente mil gracias.
PD. Jejeje, sí, noté que lo que habías señalado es para delphi. No hay problema, es legible. Gracias . |
#2
|
|||
|
|||
Qué tal! Pues ya implementé lo que me has dicho, más un par de líneas para asegurar que los bloques obtenidos contengan cadenas no truncadas. Manejando bloques de 2048 bytes he obtenido alrededor de 4 megas de texto procesados en 8 minutos, por lo que más adelante probaré aumentando dicho bloque al doble o triple, según vaya viendo qué pasa con los recursos de mi Lentium.
La implementación en C++ Builder: Código:
ifstream in; // Flujo de lectura ofstream out; // Flujo de escritura const int blockSize = 2048; char buffer[blockSize], faltante[256]; String bloque, ruta = ExtractFileDir (Application->ExeName) + "\\OUT.txt", procesado = ""; // almacenará resultados del procesamiento in.open (edtFuente->Text.c_str()); // Archivo a leer out.open (ruta.c_str()); // Archivo de resultados if (!in || !out) // No se pudo alguno de ellos abrir... { // Mostrar algo } else { while (!in.eof()) { in.read (buffer, blockSize); // Leer los 2048 bytes bloque = buffer; // Convirtiendo a String para mejor manejo // Asegurándome de que el bloque no quede truncado... in.getline(faltante, 256, ' '); // Leo hasta el siguiente espacio en blanco o 256 caracteres // (una palabra por muy larga no sobrepasa 15 o 20) bloque += faltante; // concateno al bloque // Procesando el bloque while (!bloque.IsEmpty()) { // ... } // Escribo texto procesado en archivo out.write(procesado.c_str(), procesado.Length()); } in.close(); } Última edición por nax fecha: 23-08-2005 a las 20:07:35. |
#3
|
||||
|
||||
__________________
El malabarista. |
#4
|
|||
|
|||
Qué tal! Aún no checo lo del último hilo, pero por ahí me comentaron "con la velocidad de procesamiento de las pc's actuales, puedes leer tu archivo línea a línea y no se demorará casi nada". No me gustó nada el "consejo", pues creo que un programador siempre debe realizar de manera eficiente sus programas. Pero lo probé... y reconozco que tienen razón. Un archivo de 100 megas procesado línea a línea no demoró más de dos minutos (lo corrí en otro equipo un poco más actual comparado con el de mi último hilo)...
Última edición por nax fecha: 27-08-2005 a las 02:15:57. |
#5
|
||||
|
||||
Actualmente estoy acabando un pequeño proyecto que, resumiendo, sirve para enviar información entre tiendas, sucursales y la central de la empresa. Se usa un servidor FTP y los datos son archivos de texto, normales, con campos separados por tabulador y fin de linea, van comprimidos y encriptados. Pero lo que quiero comentarte es que estos archivos de texto ocupan varios gigas y la velocidad de proceso es muy buena, la cpu no se satura, gran parte del trabajo lo hace el disco (leer y escribir), así que cuando está procesando datos, los usuarios no lo notan en sus terminales.
He usado lo "normal" con delphi, un TextFile, abierto con AssignFile, leer con ReadLn, escribir con WriteLn, etc... y no hay problemas de alto consumo de memoria, lentitud, ni nada... aunque, eso sí, importar varios gigas de datos sí que lleva su tiempo para insertarlos en la base de datos (firebird) de la central |
|
|
|