Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/03/2006, 01:02
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Parsear un .txt con estructura definida

Hola gente:

Necesito de su ayuda para parsear un archivo de texto plano .txt que tiene una estructutra definida.

Lo que tengo es más o menos son muchos bloques similares a este:
Código:
{
	{
		{
			{[adena];99;159;100}
		};70
	};
	{
		{
			{[long_sword];1;1;5.8252};
			{[sword_of_reflexion];1;1;5.8252};
			{[sword_of_reflexion_blade];1;1;82.5243};
			{[sword_of_watershadow];1;1;5.8253}
		};0.1514
	};
	{
		{
			{[animal_skin];1;1;47.0588};
			{[coal];1;1;35.2941};
			{[scroll_of_escape];1;1;17.6471}
		};5.6642
	}
}
Bueno... los datos son del juego Lineage II. Y esto es la lista de drops de un mounstruo. Como se ve... hay grupos definidos por llaves {}. Los grupos más pequeños son de un item y tienen la siguiente estructura
{[nombre_item];valor_min;valor_max;probabilidad};

Además, se puede ver un valor numérico después de la llave } que afecta a la probabilidad de todo un grupo. La estructura y la profundidad es la misma que puse en el ejemplo. Pero la cantidad de grupos es variable.

Necesito que me ayuden a parsearlo de tal manera que pueda tener una estructura más sencilla de trabajar, como esta:
Código PHP:
<?
$array_drop
['adena']['min'] = 99;
$array_drop['adena']['max'] = 159;
$array_drop['adena']['probabilidad'] = 100*70// prob del item * prob del grupo
$array_drop['long_sword']['min'] = 1;
$array_drop['long_sword']['max'] = 1;
$array_drop['long_sword']['probabilidad'] = 5.8252*0.1514// prob del item * prob del grupo
Esto es lo único que me falta y, como las expresiones regulares no son mi fuerte, vine a pedir un poco de ayuda :p

Un dato más:
Noten que el punto y coma ";" está ahí siempre que siga algún grupo más. Cuando estamos en el último grupo de ese nivel, ya no pone más el ";".
Además, todo el bloque no tiene saltos de línea ni espacios en blanco (en el ejemplo le dí saltos y tabs para que se aprecie mejor la estructura). Todo está ne una sola línea y, como dije, no hay ningún espacio en blanco.

Ojalá me puedan echar una mano.