Programación General > C/C++
Estructura y eficiencia del codigo
(1/1)
budoky:
Hola, como he comentado en el subforo de visual c++ estoy pensando en hacer un editor de partidas guardadas, el problema que se me plantea es estructurar y leer de una forma sencilla el fichero de entrada que tiene un formato similar a:
--- Código: Text ---date="1415.4.8"player="DAN"monarch=7126cardinal=65leader=2050advisor=1937rebel=1808unit=1627flags={}gameplaysettings={ setgameplayoptions= {0 0 0 0 0 0 0 0 0 1 0 0 0 }}start_date="1399.10.14"id={ id=14246 type=4713}rebel_faction={ id= { id=229 type=40 } type="particularist_rebels" name="Swahili Particularists" heretic="Ahmadi" country="ZAN" independence="---" culture="swahili" religion="sunni" government="tribal_federation" province=1196 leader= { id=1458 type=38 } army= { id=230 type=40 } provinces= { 1186 1191 }}rebel_faction={ id= { id=280 type=40 } type="particularist_rebels" name="Milanese Particularists" heretic="Hussite" country="MLO" independence="---" culture="lombard" religion="catholic" government="despotic_monarchy" province=117 leader= { id=1474 type=38 } army= { id=281 type=40 } provinces= { 115 }}
Se trata de un solo fichero de texto muy extenso, en texto plano puede llegar a ocupar unos 100Mb. Hasta ahora lo que hacia era leer cada linea y buscar cada componente con el strtok, de modo que por ejemplo para player="DAN", lo almaceno en una variable llamada player, mientras que me creo un objeto para los tipos rebel_faction y dentro pueden existir tambien otros objetos. Lo planteo como si fuese un arbol. El problema que se me presenta es que al leer así es que puede ser muy lento a la larga además del hecho de tener que almacenar tantísimas variables no se si es viable. ¿Algún consejo sobre como leer y almacenar los datos de una forma más eficiente?
Como ejemplo un archivo de unos 10Mb supone aproximadamente 7 millones de lineas aunque he visto que pueden llegar a ocupar 12 millones de lineas. Aunque después no sea necesario almacenarlas todas.
Edito: Desconozco si hay alguna forma de editar el fichero buscando un compnente exacto para editarlo, de modo que solo se cache una parte del fichero.
Geo:
¿Y si separas en varios archivos por secciones? ¿No has planteado la posibilidad de usar una base de datos, p. ej. SQLite?
m0skit0:
Para hacer la carga y parseo más eficientes, si el fichero no está diseñado para ser modificado a mano, te aconsejo que no uses ficheros de texto y evites las cadenas de caracteres en lo posible. El texto es de lo peor que le puedes dar a parsear a un computador. Te puedes hacer una sencilla GUI para manejarlo si necesitas modificar/visualizar partidas guardadas manualmente.
Navegación
Ir a la versión completa