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

[0] Índice de Mensajes

Ir a la versión completa