ini_file(str)

Publicado por dixon, Octubre 06, 2021, 08:49:03 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

dixon

Autor del script: Reyes Dávila
Nombre del script: ini_file(str)
Breve descripción de su función: Habilita a game maker 4.3 para trabajar con archivos ini de igual manera como en las versiones superiores.
Versiones usadas: Solo para game maker 4.3.
Version del script: 1

Código del script

///ini_file(str);
//Script para game maker 4.3, para abrir archivos ini.
//Serial del script: 123

str_in_123=argument0;
str_length_123=string_length(str_in_123);

//Escaneando string
funcion_encontrada_123=0;

str_pos_123=string_pos("(",str_in_123);//Posicion del primer paréntesis
for(i=str_pos_123;i<=str_length_123;i+=1)
{
	str_copy_123=string_copy(str_in_123,i,1);
	if(str_copy_123="(")
	{
		//Copiando nombre de funcion
		funcion_str_123="";
		continuar_123=1;
		str_copy_123="";
		for(i2=i-1;i2>=1 and continuar_123;i2-=1)
		{
			str_copy_2_123=string_copy(str_in_123,i2,1);
			if(ord(str_copy_2_123)<=65 || ord(str_copy_2_123)>=122)
			{
				//Deteniendo el proceso.
				continuar_123=0
			}
			else
			{
				//Copiando caracter.
				funcion_str_123=string(str_copy_2_123)+string(funcion_str_123);
			}
		}

		//Funcion encontrada
		funciones_posibles='ini_close(,ini_key_delete(,ini_key_exists(,ini_open(,
ini_open_from_string(,ini_read_real(,ini_read_string(,ini_section_delete(,ini_section_exists(,ini_write_real(,ini_write_string(,';
		str_count_123=string_count(funcion_str_123+string("("),funciones_posibles);
		if(str_count_123=1)
		{
			funcion_encontrada_123+=1;
			funcion_123[funcion_encontrada_123,0]=funcion_str_123;

			//Verificando que la primera funcion sea ini_open(str);
			c1_123=(funcion_123[1,0]="ini_open");
			c2_123=(funcion_123[1,0]="ini_open_from_string");
			//if(!c1_123 and !c2_123){show_message("Falta funcion: ini_open(name) o ini_open_from_string(string)")}
		}

		/////////////////Copiando argumentos de la funcion
		index_123=i;
		//length_123=string_length(str_in_123)-index_123+1;
		length_123=string_length(str_in_123);

		continuar_123=1;
		count_comillas_123=0;
		count_comillas2_123=0;
		pos_parentesis_cierre=1;

		//Encontrando el parentesis correcto de cierre de la función.
		for(i2=index_123;i2<length_123 and continuar_123;i2+=1)
		{
				//Esto se hace para no tomar en cuenta los parentesis
				//Que se encuentren dentro de comillas.
				index_123=i2;count_123=1;
				str_ram2_123=string_copy(str_in_123,index_123,count_123);
				if(str_ram2_123="'"){count_comillas_123+=1}
				if(str_ram2_123='"'){count_comillas2_123+=1}
				c1_123=(frac(count_comillas_123/2)=0);
				c2_123=(frac(count_comillas2_123/2)=0);
				c3_123=(str_ram2_123=")");
				if(c1_123 and c2_123 and c3_123)
				{
					pos_parentesis_cierre=i2;
					continuar_123=0;
				}
		}

		index_123=i+1;
		count_123=pos_parentesis_cierre-index_123;
		str_ram_123=string_copy(str_in_123,index_123,count_123);
		
		//Describiendo a los argumentos
		count_123=string_count(",",str_ram_123);
		count2_123=string_count(".",str_ram_123);
		length_123=string_length(str_ram_123);
		str_inicial_123=string_copy(str_ram_123,1,1);
		str_final_123=string_copy(str_ram_123,length_123,1);

		//Condiciones para las funciones
		if(funcion_123[funcion_encontrada_123,0]="ini_close"){argumentos_123=0;devolucion_123="none"}
		if(funcion_123[funcion_encontrada_123,0]="ini_key_delete"){argumentos_123=2;devolucion_123="none"}
		if(funcion_123[funcion_encontrada_123,0]="ini_key_exists"){argumentos_123=2;devolucion_123="binario"}
		if(funcion_123[funcion_encontrada_123,0]="ini_open"){argumentos_123=1;devolucion_123="none"}
		if(funcion_123[funcion_encontrada_123,0]="ini_open_from_string"){argumentos_123=1;devolucion_123="none"}
		if(funcion_123[funcion_encontrada_123,0]="ini_read_real"){argumentos_123=3;devolucion_123="real"}
		if(funcion_123[funcion_encontrada_123,0]="ini_read_string"){argumentos_123=3;devolucion_123="string"}
		if(funcion_123[funcion_encontrada_123,0]="ini_section_delete"){argumentos_123=1;devolucion_123="none"}
		if(funcion_123[funcion_encontrada_123,0]="ini_section_exists"){argumentos_123=1;devolucion_123="binario"}
		if(funcion_123[funcion_encontrada_123,0]="ini_write_real"){argumentos_123=3;devolucion_123="none"}
		if(funcion_123[funcion_encontrada_123,0]="ini_write_string"){argumentos_123=3;devolucion_123="none"}
	
		
		//Asignando cantidad de argumento a funciones.

		funcion_123[funcion_encontrada_123,1]=argumentos_123;
		//Asignando tipo de respuesta, salida o return.
		funcion_123[funcion_encontrada_123,2]=devolucion_123;

		//Para las funciones con un argumento
		if(argumentos_123=1)
		{
			//Asignando argumento a la posicion correcta
			funcion_123[funcion_encontrada_123,3]=str_ram_123;
		}

		//Para las funciones con más de un argumento.
		analizando_argumento_123=3;
		if(argumentos_123>1)
		{
			for(i3=1;i3<=argumentos_123;i3+=1)
			{
				//Extrayendo argumentos.
				continuar_123=1;
				count_comillas_123=0;
				count_comillas2_123=0;
				length_123=string_length(str_ram_123);
				
				if(i3<argumentos_123)
				{
					for(i2=1;i2<=length_123 and continuar_123;i2+=1)
					{	
						index_123=i2;count_123=1;
						str_ram2_123=string_copy(str_ram_123,index_123,count_123);
						if(str_ram2_123="'"){count_comillas_123+=1}
						if(str_ram2_123='"'){count_comillas2_123+=1}
						c1_123=(frac(count_comillas_123/2)=0);
						c2_123=(frac(count_comillas2_123/2)=0);
						c3_123=(str_ram2_123=",");
						
						if(c1_123 and c2_123 and c3_123)
						{
							continuar_123=0;
							index_123=1;count_123=i2-1;
							funcion_123[funcion_encontrada_123,analizando_argumento_123]=string_copy(str_ram_123,index_123,count_123);
							
							index_123=count_123+2;count_123=string_length(str_ram_123)-index_123+1;
							str_ram_123=string_copy(str_ram_123,index_123,count_123);
							analizando_argumento_123+=1;
						}
					}

				}//if(i3<argumentos_123)
				else
				{
					//Asignando argumento y borrando comillas
					funcion_123[funcion_encontrada_123,analizando_argumento_123]=str_ram_123;
				}
			}
		}

////////////////////////////////Buscando variable de salida.
		if(funcion_123[funcion_encontrada_123,2]!="none")
		{
		posicion_variable_123=funcion_123[funcion_encontrada_123,1]+3;
		funcion_123[funcion_encontrada_123,1]+=1;
		iniciar_copia_123=0;
		igualdad_encontrada_123=0;

		//Asignando variable de salida.
		str_capture_123="";
		continuar_123=1;
		for(i2=i;i2>1 and continuar_123;i2-=1)
		{
			str_ram2_123=string_copy(str_in_123,i2,1);

			//Iniciar copia
			c1=(str_ram2_123=chr(ord("=")));
			c2=(str_ram2_123!=chr(ord("=")));//Para iniciar copia;
			c3=(ord(str_ram2_123)=59 || ord(str_ram2_123)=41 || ord(str_ram2_123)=13 || ord(str_ram2_123)=10);//Finalizar copia;
			
			if(c1){igualdad_encontrada_123=1}
			if(igualdad_encontrada_123 and c2){iniciar_copia_123=1}

			//Finalizando copia
			if(c3)
			{
				//Finalizando copia
				continuar_123=0;
				iniciar_copia_123=0;
				igualdad_encontrada_123=0;
			}

			if(iniciar_copia_123)
			{
				//Copiando
				str_capture_123=string(str_ram2_123)+string(str_capture_123);
			}
		}
		

		///Integrando al array el nombre de la variable de salida
		funcion_123[funcion_encontrada_123,posicion_variable_123]=str_capture_123;
		}


//////////////////////////FIN Buscando variable de salida.

		//Posicionando al final de la funcion, despues del parentesis
		index_123=i+string_length(str_ram_123)+2;
		count_123=string_length(str_in_123)-index_123+1;
		str_in_123=string_copy(str_in_123,index_123,count_123);
		str_length_123=string_length(str_in_123);
		i=1;

	}//Fin if(str_copy_123="(")
}

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
////////////////Analizando archivo ini

//Analizando funcion por funcion
archivo_ini_123="";

for(i=1;i<=funcion_encontrada_123;i=i+1)
{
	//Funciones para leer archivo ini
	if(funcion_123[i,0]="ini_open" || funcion_123[i,0]="ini_open_from_string")
	{
		///Leyendo archivo ini desde file
		if(funcion_123[i,0]="ini_open")
		{
			//Verificando argumento
			c1=string_count("'",funcion_123[i,3]);
			c2=string_count('"',funcion_123[i,3]);

			if(c1 || c2)
			{
				//Para abrir archivo desde string con comillas
				abrir_archivo_123=string_replace_all(funcion_123[i,3],"'","");
				abrir_archivo_123=string_replace_all(abrir_archivo_123,'"',"");
				file_open_read(abrir_archivo_123);
				ubicacion_archivo_ini_123=abrir_archivo_123;
			}
			else
			{
				//Para abrir archivo desde variable
				str_xx_123="file_open_read([x])";
				str_xx_123=string_replace(str_xx_123,"[x]",funcion_123[i,3]);
				execute_string(str_xx_123);
				
				str_xx_123="ubicacion_archivo_ini_123=[x]";
				str_xx_123=string_replace(str_xx_123,"[x]",funcion_123[i,3]);
				execute_string(str_xx_123);
			}

			while(!file_eof())
			{
				archivo_ini_123=archivo_ini_123+file_read_string()+chr(13)+chr(10);
				file_readln();
			}
			file_close();
		}

		//Leyendo string ini
		if(funcion_123[i,0]="ini_open_from_string")
		{
			archivo_ini_123=funcion_123[i,3];
			ubicacion_archivo_ini_123="string";
		}

		//Corrigiendo final de string ini
		index=string_length(archivo_ini_123);
		count=1;
		x1=string_copy(archivo_ini_123,index,count);
		while(x1=chr(13) || x1=chr(10))
		{
			str=archivo_ini_123;
			index=1;
			count=string_length(archivo_ini_123)-1;
			archivo_ini_123=string_copy(str,index,count);
			index=string_length(archivo_ini_123);
			count=1;
			x1=string_copy(str,index,count);
		}
		archivo_ini_123+=chr(13)+chr(10);

		/////////////////////////////////////////////////////////////
		//Archivo ini para ini_key_delelete, ini_section_delete,
		//ini_real_write, ini_string_write.
		//archivo_ini_real_123.
		//Separando linea por linea
		archivo_ini_real_123=archivo_ini_123;
		count_lineas_123=string_count(chr(13)+chr(10),archivo_ini_real_123);
		for(i4=0;i4<count_lineas_123;i4=i4+1)
		{
			pos_x_123=string_pos(chr(13)+chr(10),archivo_ini_real_123);
			index=1;
			count=pos_x_123-1;
			linea_ini[i4]=string_copy(archivo_ini_real_123,index,count);
			index=count+3;
			count=string_length(archivo_ini_real_123)-index+1;
			archivo_ini_real_123=string_copy(archivo_ini_real_123,index,count);

			//Quitando espacios en blanco del inicio
			str=linea_ini[i4];//Entrada
			index=1;count=1;
			str_ram_x=string_copy(str,index,count);
			while(str_ram_x=chr(10) || str_ram_x=chr(13) || str_ram_x=chr(32))
			{
				index=2;
				count=string_length(str)-1;
				str=string_copy(str,index,count);
				index=1;count=1;
				str_ram_x=string_copy(str,index,count);
			}	
			linea_ini[i4]=str;//Salida
		}
		lineas_ini_123=i4;
		///////////////////////////////////////////////////////////

		//Corrigiendo saltos de linea
		str=archivo_ini_123;
		substr=chr(13)+chr(10)+chr(13)+chr(10);
		while(string_count(substr,str))
		{
		newstr=chr(13)+chr(10);
		archivo_ini_123=string_replace_all(str,substr,newstr);
		str=archivo_ini_123;
		}

		//Analizando archivo ini.
		secciones_123=string_count("[",archivo_ini_123);//Cantidad de secciones
		i2=1;

		for(i2=1;i2<=secciones_123;i2=i2+1)
		{
			//Obteniendo nombre de funcion
			pos_123=string_pos("[",archivo_ini_123);//Buscando corchete de apertura.
			pos2_123=string_pos("]",archivo_ini_123);//Buscando corchete de cierre.
			index=pos_123+1;
			count=pos2_123-pos_123-1;
			seccion_ini_123[i2,0]=string_copy(archivo_ini_123,index,count);
			
			//Recortando archivo ini
			length_123=string_length(archivo_ini_123);
			index=pos2_123+1;
			count=length_123-index+1;
			archivo_ini_123=string_copy(archivo_ini_123,index,count);

			//Quitando caracteres del inicio
			//Corrigiendo saltos de linea
			str=archivo_ini_123;
			index=1;count=1;
			str_ram_x=string_copy(str,index,count);
			while(str_ram_x=chr(10) || str_ram_x=chr(13))
			{
				index=2;
				count=string_length(archivo_ini_123)-1;
				archivo_ini_123=string_copy(str,index,count);
				index=1;count=1;
				str=archivo_ini_123;
				str_ram_x=string_copy(str,index,count);
			}

	
			//Buscando corchete posterior
			pos_123=string_pos("[",archivo_ini_123);//Buscando corchete de apertura.
			pos2_123=string_pos("]",archivo_ini_123);//Buscando corchete de cierre.
			
			//si ya no hay mas secciones
			secciones_restantes_123=string_count("[",archivo_ini_123);
			if(secciones_restantes_123=0)
			{
				pos_123=string_length(archivo_ini_123)+1;
			}

			//Buscando cantidad de claves.
			index=1;count=pos_123-1;
			string_posterior_123=string_copy(archivo_ini_123,index,count);
			claves_123=string_count("=",string_posterior_123);
			seccion_ini_123[i2,1]=claves_123;

			//Extrayendo las claves y valores
			for(i3=1;i3<=claves_123;i3=i3+1)
			{
				index=1;
				count=string_pos("=",string_posterior_123)-1;
				clave_x_123=string_copy(string_posterior_123,index,count);
				index=count+2;
				count=length_123-index+1;
				string_posterior_123=string_copy(string_posterior_123,index,count);

				index=1;
				count=string_pos(chr(10),string_posterior_123)-2;
				valor_x_123=string_copy(string_posterior_123,index,count);

				//Corrigiendo espacios en blanco
				//Quitando espacios en blanco
				index_x2=1;
				count_x2=1;
				string_xy_123=string_copy(valor_x_123,index_x2,count_x2);
				while(string_xy_123=chr(32))
				{
					index_x2=2;
					count_x2=string_length(valor_x_123)-index_x2+1;
					valor_x_123=string_copy(valor_x_123,index_x2,count_x2);
					index_x2=1;
					count_x2=1;
					string_xy_123=string_copy(valor_x_123,index_x2,count_x2);
				}

				index=count+3;
				count=length_123-index+2;
				string_posterior_123=string_copy(string_posterior_123,index,count);
				
				//////////////////Limpiando claves

				//Quitando espacio inicial
				str=clave_x_123;
				index=1;count=1;
				x1=string_copy(str,index,count);
				while(x1=chr(32))
				{
					index=2;
					count=string_length(clave_x_123)-1;
					clave_x_123=string_copy(str,index,count);
					str=clave_x_123;
					index=1;count=1;
					x1=string_copy(str,index,count);
				}

				//Quitando espacio final
				str=clave_x_123;
				index=string_length(str);count=1;
				x1=string_copy(str,index,count);
				while(x1=chr(32))
				{
					index=1;
					count=string_length(clave_x_123)-1;
					clave_x_123=string_copy(str,index,count);
					str=clave_x_123;
					index=string_length(str);count=1;
					x1=string_copy(str,index,count);
				}

				//Almacenando clave y valor
				seccion_ini_123[i2,i3+1]=clave_x_123;
				seccion_ini_123[i2,i3+1+claves_123]=valor_x_123;

			}//fin for(i3=1;i3<=claves_123;i3=i3+1)
			
		}//fin for(i2=1;i2<=secciones;i2=i2+1)

	}//fin if(funcion_123[i,0]="ini_open".....

	///////////Devoliendo valores en variables
	///Comparando funciones

	//////////////////////////////////Funcion Clave existe
	seccion_buscada_123="";
	clave_buscada_123="";
	seccion_existe_123=0;
	clave_existe_123=0;
	variable_salida_123="";
	str_salida_123="";
	continuar_123=1;
	numero_seccion_123=0;
	numero_clave_123=0;
	argumento3_123="";
	valor_123="";
	argumentos_123=-1;

	if(funcion_123[i,0]="ini_key_exists")
	{
		argumentos_123=2;
		seccion_buscada_123=funcion_123[i,3];
		clave_buscada_123=funcion_123[i,4];
		variable_salida_123=funcion_123[i,5];
	}

	if(funcion_123[i,0]="ini_section_exists")
	{
		argumentos_123=1;
		seccion_buscada_123=funcion_123[i,3];
		variable_salida_123=funcion_123[i,4];
	}

	if(funcion_123[i,0]="ini_read_real")
	{
		argumentos_123=3;
		seccion_buscada_123=funcion_123[i,3];
		clave_buscada_123=funcion_123[i,4];
		argumento3_123=funcion_123[i,5];
		variable_salida_123=funcion_123[i,6];	
	}


	if(funcion_123[i,0]="ini_read_string")
	{
		argumentos_123=3;
		seccion_buscada_123=funcion_123[i,3];
		clave_buscada_123=funcion_123[i,4];
		argumento3_123=funcion_123[i,5];
		variable_salida_123=funcion_123[i,6];

	}

	if(funcion_123[i,0]="ini_key_delete")
	{
		argumentos_123=2;
		seccion_buscada_123=funcion_123[i,3];
		clave_buscada_123=funcion_123[i,4];	
	}

	if(funcion_123[i,0]="ini_section_delete")
	{
		argumentos_123=1;
		seccion_buscada_123=funcion_123[i,3];
	}

	if(funcion_123[i,0]="ini_write_string")
	{
		argumentos_123=3;
		seccion_buscada_123=funcion_123[i,3];
		clave_buscada_123=funcion_123[i,4];
		argumento3_123=funcion_123[i,5];	
	}

	if(funcion_123[i,0]="ini_write_real")
	{
		argumentos_123=3;
		seccion_buscada_123=funcion_123[i,3];
		clave_buscada_123=funcion_123[i,4];
		argumento3_123=funcion_123[i,5];
	}
	///Asignando valores correctos a argumentos
	//Cambiando valores entre valores de strings y valores de variables.

	//Organizando argumentos
	for(i2=1;i2<=argumentos_123;i2=i2+1)
	{
		//Entrada principal
		if(i2=1){str_entrada_123=seccion_buscada_123};
		if(i2=2){str_entrada_123=clave_buscada_123};
		if(i2=3){str_entrada_123=argumento3_123;};

		if(string_length(str_entrada_123))
		{
			c1=string_count("'",str_entrada_123);
			c2=string_count('"',str_entrada_123);
			if(c1 || c2)
			{
				str_entrada_123=string_replace_all(str_entrada_123,"'","");
				str_entrada_123=string_replace_all(str_entrada_123,'"',"");
			}
			else
			{
				str_ram_x_123="str_entrada_123="+string(str_entrada_123);
				execute_string(str_ram_x_123);
			}



			//Quitando espacios en blanco iniciales.
			str=str_entrada_123;//Entrada
			index=1;count=1;
			str_ram_x=string_copy(str,index,count);
			while(str_ram_x=chr(10) || str_ram_x=chr(13) || str_ram_x=chr(32))
			{
				index=2;
				count=string_length(str)-1;
				str=string_copy(str,index,count);
				index=1;count=1;
				str_ram_x=string_copy(str,index,count);
			}	
			str_entrada_123=str;//Salida

			//Quitando espacios en blanco finales.
			str=str_entrada_123;//Entrada
			index=string_length(str);count=1;
			str_ram_x=string_copy(str,index,count);
			while(str_ram_x=chr(10) || str_ram_x=chr(13) || str_ram_x=chr(32))
			{
				index=1;
				count=string_length(str)-1;
				str=string_copy(str,index,count);
				index=string_length(str);count=1;
				str_ram_x=string_copy(str,index,count);
			}	
			str_entrada_123=str;//Salida


		}

		//Salida principal
		if(i2=1){seccion_buscada_123=str_entrada_123};
		if(i2=2){clave_buscada_123=str_entrada_123};
		if(i2=3){argumento3_123=str_entrada_123};

	}//Fin for(i2=1;i2<=funcion_123[i2,1];i2=i2+1)
	//Fin organizando argumentos

	
	//Verificando que existe la seccion
	for(i2=1;i2<=secciones_123 and continuar_123;i2=i2+1)
	{
		if(seccion_ini_123[i2,0]=seccion_buscada_123)
		{
			seccion_existe_123=1;
			numero_seccion_123=i2;
			continuar_123=0;
		}
	}


	//Buscando clave
	if(seccion_existe_123)
	{
		claves_123=seccion_ini_123[numero_seccion_123,1];
		continuar_123=1;
		for(i3=1;i3<=claves_123 and continuar_123;i3=i3+1)
		{
			if(seccion_ini_123[numero_seccion_123,i3+1]=clave_buscada_123)
			{
				clave_existe_123=1;
				numero_clave_123=i3+1;
				continuar_123=0;
			}
		}
	}
			
	//Mostrando respuesta
	if(string_length(variable_salida_123))
	{
		str_salida_123=string(variable_salida_123)+"=";
		if(funcion_123[i,0]="ini_key_exists"){str_salida_123+=string(clave_existe_123)}
		if(funcion_123[i,0]="ini_section_exists"){str_salida_123+=string(seccion_existe_123)}
		if(funcion_123[i,0]="ini_read_real")
		{
			if(clave_existe_123)
			{
				agumentos_x_123=seccion_ini_123[numero_seccion_123,1];
				valor_123=seccion_ini_123[numero_seccion_123,numero_clave_123+agumentos_x_123];
				str_salida_123+="real(string_digits(valor_123))";
			}
			else
			{
				str_salida_123+=string(argumento3_123);
			}
		}

		if(funcion_123[i,0]="ini_read_string")
		{
			if(clave_existe_123)
			{
				agumentos_x_123=seccion_ini_123[numero_seccion_123,1];
				valor_123=seccion_ini_123[numero_seccion_123,numero_clave_123+agumentos_x_123];
				str_salida_123+="valor_123";
			}
			else
			{
				str_salida_123+="'"+string(argumento3_123)+"'";
			}
		}

		execute_string(str_salida_123);
	}





//////////////////////////////////////////////////////////////////////////
//Para las funciones ini_key_delete, ini_section_delete, ini_real_write, ini_string_write

		c1=funcion_123[i,0]="ini_section_delete";
		c2=funcion_123[i,0]="ini_key_delete";
		c3=funcion_123[i,0]="ini_write_real";
		c4=funcion_123[i,0]="ini_write_string";

		if(c1 || c2 || c3 || c4)
		{
			seccion_encontrada_123=0;
			linea_seccion_123=-1;

			buscar_clave_123=1;
			if(funcion_123[i,0]="ini_section_delete"){buscar_clave_123=0;}
			//clave_buscada_123;
			clave_encontrada_123=0;
			linea_clave_123=-1;

			buscar_linea_vacia_123=0;
			if(funcion_123[i,0]="ini_section_delete"){buscar_linea_vacia_123=1;}
			linea_vacia_123=-1;

			//Buscando las lineas de las claves.
			//Analizando archivo ini
			//Leer linea por linea
			//Buscando seccion
			//Buscar posicion de la seccion
			seccion_buscada_123="["+string(seccion_buscada_123)+"]";
			continuar_x_123=1;
			for(i4=0;i4<lineas_ini_123 and continuar_x_123;i4=i4+continuar_x_123)
			{
				index=1;
				count=string_length(seccion_buscada_123);
				str_123=string_copy(linea_ini[i4],index,count);
				if(str_123=seccion_buscada_123)
				{
					//Encontrar la linea de la seccion
					seccion_encontrada_123=1;
					linea_seccion_123=i4;
					continuar_x_123=0;
				}
			}


			//Buscar clave si se encuentra la seccion
			//Buscar linea de la clave
			c1=buscar_clave_123;
			c2=seccion_encontrada_123;
			if(c1 and c2)
			{
				str_123="";
				continuar_x_123=1
				for(i5=linea_seccion_123;i5<lineas_ini_123 and continuar_x_123;i5=i5+1)
				{
					//clave_buscada_123
					index=1;
					count=string_length(clave_buscada_123);
					str_123=string_copy(linea_ini[i5],index,count);
					if(str_123=clave_buscada_123)
					{
						clave_encontrada_123=1;
						linea_clave_123=i5;
						continuar_x_123=0;
					}
				}
				//Buscando linea de la clave
			}

			//Buscando linea vacia para ini_section_delete
			c1=buscar_linea_vacia_123;
			if(c1)
			{
				continuar_i5_123=1;
				for(i5=linea_seccion_123+1;i5<lineas_ini_123 and continuar_i5_123;i5=i5+continuar_i5_123)
				{
					c1=(string_length(linea_ini[i5])=0);
					c2=(linea_vacia_123=-1);
					if(c1 and c2)
					{
						//Encontrar la linea de la seccion
						continuar_i5_123=0;//break
					}
				}
				linea_vacia_123=i5;
			}
				
			//Reemplazar linea con clave y valor
			//Crear lineas del nuevo archivo ini
			if(clave_encontrada_123)
			{
				if(funcion_123[i,0]="ini_write_string")
				{
					clave_x_123=clave_buscada_123;
					valor_x_123=argumento3_123;
					linea_ini[linea_clave_123]=string(clave_x_123)+" = "+string(valor_x_123);
				}
		
				if(funcion_123[i,0]="ini_write_real")
				{
					clave_x_123=clave_buscada_123;
					valor_x_123=argumento3_123;
					linea_ini[linea_clave_123]=string(clave_x_123)+" = "+string(valor_x_123);
				}

				if(funcion_123[i,0]="ini_key_delete")
				{
					lineas_ini_123=lineas_ini_123-1;
					for(i6=linea_clave_123;i6<lineas_ini_123;i6=i6+1)
					{
						linea_ini[i6]=linea_ini[i6+1];
					}
				}
			}
		
			if(seccion_encontrada_123)
			{
				if(funcion_123[i,0]="ini_section_delete")
				{
					resta_123=linea_vacia_123-linea_seccion_123+1;
					lineas_ini_123=lineas_ini_123-resta_123;
					for(i6=linea_seccion_123;i6<lineas_ini_123;i6=i6+1)
					{
						linea_ini[i6]=linea_ini[i6+resta_123];
					}
				}
			}

			//Redactando archivo ini
			//Crear un nuevo archivo ini
			//Redactar linea por linea
			
			//Creando nuevo archivo ini
			archivo_ini_123="";
			for(i5=0;i5<lineas_ini_123;i5=i5+1)
			{
				archivo_ini_123+=linea_ini[i5]+chr(13)+chr(10);
			}

			if(ubicacion_archivo_ini_123!="string")
			{
				file_open_write(ubicacion_archivo_ini_123);
				for(i6=0;i6<lineas_ini_123;i6=i6+1)
				{
					file_write_string(linea_ini[i6]);
					file_writeln();
					
				}
				file_close();
			}
			

		}//if(c1 || c2 || c3 || c4)
		







}//for(i=1;i<=funcion_encontrada_123;i+=1)








return str_in_123;

////Caracteres que intervienen en el proceso:
//Espacio en blanco: chr(32).
//" Comillas dobles, comilla tipográfica: chr(34).
//' Comillas simples: chr(39).

//( Paréntesis de apertura: chr(40).
//) Paréntesis de cierre: chr(41).
//, Coma: chr(44).
//. Punto: chr(46).
// "/" Barra: chr(47).
//0 Numero 0: chr(48).
//9 Número 9: chr(57).


//; Punto y coma: chr(59).

//= Signo de igualdad: chr(61).

//A Letra A mayúscula: chr(65).
//Z Letra Z mayúscula: chr(90).

//_ Línea baja, piso: chr(95).

//a Letra A minúscula: chr(97).
//z Letra Z minúscula: chr(122).

//á Letra A con tilde: chr(225).
//ú Letra U con tilde: chr(250).


//Funciones ini
//ini_close();
//ini_key_delete(section, key);
//ini_key_exists(section, key);
//ini_open(name);
//ini_open_from_string(string);
//ini_read_real(section, key, default);
//ini_read_string(section, key, default);
//ini_section_delete(section);
//ini_section_exists(section);
//ini_write_real(section, key, value);
//ini_write_string(section, key, value);


Detalles:
ini_file(str) en su primera versión es un script exclusivo de game maker 4.3 el cual le permite administrar archivos ini de igual modo que en las versiones superiores. Este script recibe como argumento una cadena que contiene las funciones necesarias para trabajar con este tipo de archivos.

Modo de uso:
1. Crear script: Con el código entregado se creará un script el cual deberá ser llamado ini_file.
2. Usar script: ini_file(str), dentro de str deberás colocar una cadena que contenga las funciones básicas para administración de archivos ini.

Ejemplo:
ini_file('   

ini_open("archivo_ini.ini");
ini_write_real("Usuario_1","clave",2112);
ini_close();

');


Mejoras a futuro:
1. Aumentar compatibilidad: Permitir que este script pueda ser usado en versiones superiores para que se pueda trabajar con ini_open_from_string(str) en todas las versiones.

Metas propuestas:
Tengo el objetivo de crear un editor html5 muy básico de video juegos y para lograrlo necesitaré cumplir las siguientes metas:



Bueno eso es todo, saludos.

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.

brunoxzx

Wao te hiciste un parser para ejecutar las funciones en un string. Se ve que fue un trabajote y el código limpio, me gusta.

Powered by EzPortal
SMF spam blocked by CleanTalk