Ver Mensaje Individual
  #19 (permalink)  
Antiguo 27/12/2012, 18:10
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Lectura de archivo en C++

Creo que deberias crear 4 listas, una para cada tipo de notificacion ( + r d - ), de esta forma podras acotar las busquedas; primero parseas todo el archivo y distribuyes las filas en listas segun su caracter, luego p.ej. coges el primer elemento de la lista de añadidos y quieres buscar si ya ha llegado: pues vas a la lista de recibidos y solo recorres esa lista (omites los demas), y lo mismo para lo demas. De esta forma por ejemplo puedes trazar el recorrido de un paquete sabiendo que si esta en la lista de dispensados es que ya ha salido, eso significa que puede (o no) estar en la lista de recibidos, vas a la lista de recibidos y encuentras que ya ha sido recibido por un o mas nodos intermedios, sigues leyendo la lista de recibidos y encuentras que tambien fue recibido por el nodo final, eso significa que ya puedes quitar el paquete de la lista, pues vas a la lista de eliminados y buscas ese paquete: que está ahi pues bien se envio - recibio - finalizo el proceso, que no está pues bueno esperas el siguiente reporte. El codigo de filtro será el mismo pero distribuyendo las estructuras a la fila correspondiente; y el proceso de buscar será relativamente facil: si un paquete no ha salido no lo encontraras ni en recibidos ni el eliminados (no se, supongo), eso significa que solo tienes que procesar la lista de añadidos: para cada caso buscas las opciones que tiene.

Tambien tienes otra opcion que tal vez te acelere el proceso: bajate alguna libreria de bases de datos (SQLite es un manipulador de datos standalone que no necesita servidor ni instalacion, o si ya tienes servidor puedes mirar MySQL o cualquier otra que quieras). Parseas los datos de las lineas y los envias a la base de datos, y de ahi sacas las consultas que quieras: la parte de parseo de las lineas no afectará, pero en el momento de buscar colisiones (paquetes enviados y recibidos, o cualquier otra combinacion que quieras) seguramente será mucho mas rápida que cualquier cosa que puedas implementar en c (no digo que no sepas programar, pero a menos que seas programador de motores de bases de datos esas seguramente iran mejor por velocidad, control de errores, etc..)

Saludos
vosk