Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: ini_file(str)  (Leído 123 veces)

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

Desconectado dixon

en: Octubre 06, 2021, 08:49:03 pm
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

Código: [Seleccionar]
///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:
Código: [Seleccionar]

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.

« Última modificación: Octubre 06, 2021, 08:51:11 pm por dixon »

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é.
 


No Tienes Permisos Para Dar Puntos
point 62 Puntos

Usuarios que puntuaron el tema » brunoxzx (12 Pts) » shaoran (50 Pts) 


Desconectado brunoxzx

Respuesta #1 en: Octubre 09, 2021, 12:01:43 am
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.

 
Los siguientes usuarios dieron las gracias a este tema: dixon


 


Warning: Parameter 1 to spoiler_buffer() expected to be a reference, value given in Unknown on line 0

Warning: Parameter 1 to custom_report_ob() expected to be a reference, value given in Unknown on line 0