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:
date="1415.4.8"
player="DAN"
monarch=7126
cardinal=65
leader=2050
advisor=1937
rebel=1808
unit=1627
flags=
{
}
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.