• Domingo 19 de Mayo de 2024, 16:57

Autor Tema:  Estructura y eficiencia del codigo  (Leído 1376 veces)

budoky

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Estructura y eficiencia del codigo
« en: Lunes 24 de Enero de 2011, 00:52 »
0
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
  1. date="1415.4.8"
  2. player="DAN"
  3. monarch=7126
  4. cardinal=65
  5. leader=2050
  6. advisor=1937
  7. rebel=1808
  8. unit=1627
  9. flags=
  10. {
  11. }
  12. gameplaysettings=
  13. {
  14.     setgameplayoptions=
  15.     {
  16. 0 0 0 0 0 0 0 0 0 1 0 0 0   }
  17. }
  18. start_date="1399.10.14"
  19. id=
  20. {
  21.     id=14246
  22.     type=4713
  23. }
  24. rebel_faction=
  25. {
  26.     id=
  27.     {
  28.         id=229
  29.         type=40
  30.     }
  31.     type="particularist_rebels"
  32.     name="Swahili Particularists"
  33.     heretic="Ahmadi"
  34.     country="ZAN"
  35.     independence="---"
  36.     culture="swahili"
  37.     religion="sunni"
  38.     government="tribal_federation"
  39.     province=1196
  40.     leader=
  41.     {
  42.         id=1458
  43.         type=38
  44.     }
  45.     army=
  46.     {
  47.         id=230
  48.         type=40
  49.     }
  50.     provinces=
  51.     {
  52.         1186 1191   }
  53. }
  54. rebel_faction=
  55. {
  56.     id=
  57.     {
  58.         id=280
  59.         type=40
  60.     }
  61.     type="particularist_rebels"
  62.     name="Milanese Particularists"
  63.     heretic="Hussite"
  64.     country="MLO"
  65.     independence="---"
  66.     culture="lombard"
  67.     religion="catholic"
  68.     government="despotic_monarchy"
  69.     province=117
  70.     leader=
  71.     {
  72.         id=1474
  73.         type=38
  74.     }
  75.     army=
  76.     {
  77.         id=281
  78.         type=40
  79.     }
  80.     provinces=
  81.     {
  82.         115     }
  83. }
  84.  
  85.  

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

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Estructura y eficiencia del codigo
« Respuesta #1 en: Lunes 24 de Enero de 2011, 06:47 »
0
¿Y si separas en varios archivos por secciones? ¿No has planteado la posibilidad de usar una base de datos, p. ej. SQLite?
La imaginación es el límite.
Hardware & Software | Mexchip

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Estructura y eficiencia del codigo
« Respuesta #2 en: Lunes 24 de Enero de 2011, 10:22 »
0
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.