crear archivo de texto con resultados

Started by Futu-block, August 30, 2016, 08:26:39 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

¿alguien que sepa orientarme?

Hago un FOR para averiguar si cada casillero (cada N pixeles formando un tile) es un color u otro pero tarda una barbaridad, asi que he decidido que me escriba los resultados en un archivo txt o lo que sea, luego yo copio-pego al programa original y ¡¡zasca!!

pero no tengo ni idea de como se crea un archivo como este o de como se consulta, en la biblia si aparece no se donde porque no se como buscarlo, si por crear archivos, guardar textos...


una aiuda plis

darío

Creo que lo que estás buscando es:

INT FOPEN (STRING, INT)
INT FPUTS (INT, STRING)
INT FCLOSE (INT)


private
   int fileHandler;
end
begin
  fileHandler = fopen("myfile.txt");
  fputs(fileHandler, "This is a text");
  fclose(fileHandler);
end

My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Futu-block

exactamente eso, gracias Darío, ya sé por dónde buscar
Karma++

Futu-block

#3
bueno, despues de media hora de espera me ha salido rana...
La idea es que diera el valor de una variable y me ha puesto el nombre de la variable

¿alguien sabe como hacer para que me escriba el valor de la variable en vez de un string?

La idea es copiar los valores o los resultados de varias variables


-----------edito------------

al parecer funciona si no pongo entre comillas el texto:

fputs(fileHandler, variable);

darío

Si te ha puesto el nombre de la variable es porque habŕas escrito el nombre de la variable entre comillas :)
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

radiosity

#5
Puedes usar la funcion itoa() para convertir el dato numerico en texto. Lo almacenas en una string y luego escribes ese string en el archivo de texto. Recuerda que fputs() siempre te añade un salto de linea cuado escribes un string en el archivo, por lo que cada vez que escribas con fputs lo hara en lineas diferentes.

Futu-block

Guay, tu primer karma, newbie
Ahora me toca implementarlo de alguna manera que cree un archivo que me codifique una instrucción para luego consultarla cada vez que quiera o crear nuevas

panreyes

Yo tengo un invento que igual te viene bien.

ini_read.pr-:

Global
string loaded_ini_data;
End

Function load_ini(string ruta);
Private
string linea;
Begin
loaded_ini_data=file(ruta);
end

Function string read_ini(string seccion,string clave);
Private
string datos;
int pos_seccion;
int pos_siguiente_seccion;
int pos_igual;
int pos_principio_clave;
int pos_final_clave;
Begin
if((pos_seccion=find(loaded_ini_data,"["+seccion+"]"))>-1) //buscamos el principio de la sección
pos_siguiente_seccion=find(loaded_ini_data,""+chr(10)+"[",pos_seccion); //averiguamos dónde empieza la siguiente sección
if((pos_principio_clave=find(loaded_ini_data,""+clave+"=",pos_seccion))>-1) //buscamos la clave siguiente con ese nombre
if(pos_siguiente_seccion==-1 or pos_principio_clave<pos_siguiente_seccion) //que se encuentre en esa sección
pos_final_clave=find(loaded_ini_data,chr(13),pos_principio_clave); //msdos, \r
pos_principio_clave+=len(clave)+1; //detrás del =
datos=substr(loaded_ini_data,pos_principio_clave,pos_final_clave-pos_principio_clave);
end
end
end

return datos;
end

Function read_ini_int(string seccion,string clave,int defecto);
Private
string datos;
Begin
datos=read_ini(seccion,clave);

if(datos=="")
return defecto;
else
return atoi(datos);
end
end


Aunque... me acabo de dar cuenta de que no hice las rutinas generales para escribir nuevos datos xD
Puedes ignorar mi aporte a medias, o terminarlo... xD

Futu-block

de eso nada monada, es muy interesante para estudiarlo y para (lo mas importante) comprenderlo...

de todas formas, estoy tratando de construir un ejemplo de lo que quiero exactamente, pero lleva tiempo...
(y la crap 666 a la vuelta la esquina)

Drumpi

Si lo que quieres es guardar muchos datos juntos, que siempre van a estar en el mismo orden, puedes crear una variable de tipo compuesto, como:

type data_guardar
   int n_jugadores;
   word puntos[4];
   int max_nivel;
end


Luego, en el juego creas una variable de este tipo y la rellenas con los datos:
private
    data_guardar var_guardar;
begin
    var_guardar.n_jugadores = 2;
    var_guardar.puntos[0] = 100;
    var_guardar.puntos[1] = 85;
    var_guardar.max_nivel = 10;
(...)


Así, con "save("save/partida.sav", var_guardar)" guardarás todos los datos en un fichero, y con "var_guardar = load("save/partida.sav")" puedes cargarlos. Mírate la sintaxis porque no sé si es la correcta, porque son funciones que no suelo usar. Y no utilices strings porque con ese tipo de variables suele haber problemas.

Si no, usando FOPEN y FCLOSE: tienes FPUTS y FGETS para añadir texto al fichero, y FREAD y FWRITE para ir almacenando variables sueltas (incluso tipos definidos por ti, como he explicado antes).
Tenía un tutorial escrito por ahí, creo, pero no lo encuentro (demasiados años hace ya). Si no, mírate el manual de Osk, que seguro que hay un capítulo dedicado a los ficheros.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Aunque no lo parezca, me leo la Biblia...
Hace poco descubrí los macros y molan, jajajaj
En cuanto al texto, la idea básicamente es poder guardare una codificación en un archivo para que se pueda acceder a él y/o modificarse, algo en plan validación

Drumpi

Pues nada, solo necesitas conocer esos ocho comandos para escribir en ficheros, lo demás ya depende de qué quieres guardar y en qué formato.

Unas cosillas:
- Puedes usar los formatos comprimidos (O_ZREAD, O_ZWRITE en FOPEN) para "codificar" tus ficheros y que no sean legibles con el bloc de notas o un editor hexadecimal, pero si quieres meterles más seguridad: http://wiki.bennugd.org/index.php?title=Mod_crypt
- Añádele una cabecera a tu fichero: tres letras que identifiquen el tipo de fichero que estás usando (hay quien usa 8 y quien usa 12). Parece una tontería pero hay programas que lo usan para identificar el tipo de fichero (Linux antiguamente, por ejemplo), y a ti te puede venir bien en el futuro para lo mismo.
- No te ovides de añadir un campo con el número de versión. Créeme, cuando hagas modificaciones y cambies el formato del fichero te va a ser tremendamente útil para leerlos o convertirlos a la última revisión.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

Esto no se ha acabao toavia...

Quiero escribir una variable en pantalla, pero quiero hacer selección en esa variable (o colisión en un cuadro invisible donde pinta la variable) y poder modificarla con el teclado...

¿Como escribo un valor nuevo en una variable a traves del teclado? Por supuesto que nada de letras, solo valores numericos

Drumpi

¿Te refieres a crear un cuadro de texto donde el usuario escriba una cifra?
En ese caso recomiendo crear un proceso con la imágen de la zona de texto, capaz de decirle al sistema "oye, que el ratón ha hecho clic en mi, dame el control que tengo que recibir datos del usuario", y usar la variable global ASCII para leer los caracteres del teclado.
El algoritmo ya se subió al foro, tendría que volver a buscártelo, pero estaba adaptado a todo tipo de texto. Como usaba un SWITCH para saber si se había seleccionado un caracter, el botón de borrar, o el botón de intro para terminar, sólo tendrías que identificar los caracteres del 0 al 9 para añadirlos a la cadena de texto y luego usar ATOI para convertirlo en un valor al pulsar intro.

Era algo como:


int letra, anterior_letra;
string informacion;
int salir;

salir = false;
while (!salir)
    letra = ascii;
    if ((letra != 0) && (letra != anterior_letra))
        switch (letra)
        case 9: informacion = substr(informacion, -1); end    //Botón de borrar
        case 13: salir = true; end    //Se ha pulsado enter, pero no recuerdo si el código era 10 o 13
        case 32..255: informacion = informacion + itoa(letra); end    //Esto es para todas las letras, puedes usar sólo el rango de caracteres ASCII que contienen los números
        end //switch
    end
    tecla = anterior_tecla;
    frame;
end


Es sólo un esbozo, está hecho de memoria y no sé si está correcto, pero es uno de los códigos más útiles en los DIV-like, es la mejor manera que conozco de obtener un input por teclado.
Si te referías a otra cosa ¡me has hecho perder 10 minutos de mi tiempo! >:(

:D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

#14
Eso era expresamente lo ae quería, incluso lo encotré en la biblia, pero me faltaba el ATOI ese
Lo bueno es que es un numero de tres cifras por triplicado, asi que se triplica del mismo proceso