Me preguntaba si se puede de algún modo conseguir que el comportamiento de write string pudiera ser como el siguiente
[code language="bennu"]private[
string texto[]="a","b";
begin
write_string(0,100,100,4,&texto);
loop
if(algo)i=0;end
if(otra)i=1;end
frame;
end[/code]
y que el texto que aparece se modifique en funcion de la variable i;
no, no se puede... tecnicamente no es posible... pensa solo en la sintaxis de lo que esas escribiendo... "&texto[ i ]"... "&"... "address"... le estas pasando un address de memoria, y eso es lo que imprime, es imposible...
otra cosa diferente es si usas una variable XXX y luego le asignas a esta el valor de un vector segun necesidad...
Si y muy facil: ;) ;) ;)
[code language="bennu"]
private
string texto[]="a","b";
string textoVar;
begin
write_string(0,100,100,4,&textoVar);
loop
if(algo)TextoVar = Texto[0];end
if(otra)TextoVar = Texto[1];end
frame;
end
[/code]
"yasta!".
Mas facil aún no?
[code language="bennu"]
private
string texto[]="a","b";
string textoVar;
begin
write_string(0,100,100,4,&textoVar);
loop
if(algo)i=0;end
if(otra)i=1;end
TextoVar = Texto;end
frame;
end
[/code]
Gracias kim ¿puedo llamarte kim? ja ja ja
Jejejeje si puedes, de hecho es mi nombre de pila.
Si, pero la forma en que opera bennu no es posible hacerlo asi, la instruccion recibe como parametro la direccion de una variable, y no un rango de direcciones, aunque podrias inventarte un proceso que emulara el funcionamiento del write como tu quieres, añadiendo una variable que tuviera la direccion de la variable de control de rango, jejejeje, no te voy a decir como hacerla, por que quiero que la rumies un poquitin antes, digamos que te lo dejo como ejercicio, jejejejeje.
Quote from: SplinterGU on September 25, 2008, 09:58:02 PM
otra cosa diferente es si usas una variable XXX y luego le asignas a esta el valor de un vector segun necesidad...
Por lo que yo entiendo
Texto[0]="a"
por lo que
[code language="bennu" options="singleline"]Textovar="a"[/code]; y [code language="bennu" options="singleline"]Textovar=texto[0];[/code] es lo mismo...
Y si
[code language="bennu" options="singleline"]texto[/code] cuando i=0 es lo mismo que [code language="bennu" options="singleline"]texto[0] [/code] No entiendo por qué no puede ser así
gracias por las clases, a todos
Espero poder despejar tus dudas. La funcion write_string recibe como parametro un puntero a string.. no un string ,es por eso que se antepone & al nombre de la variable ( &Textovar o &Texto[0]).
Cuando llamas a la funcion, le pasas como parametro el lugar en la memoria de donde tiene que leer el texto a mostrar, no el texto en si.. (por eso no tiene sentido escribir write_string(0,0,0,0,"cadena"))
Si bien el texto ubicado en ese "lugar" puede cambiar, el lugar debe mantenerse fijo. Texto[0] y Texto[1] estan en diferentes lugares en la memoria. Es por esto que se usa una variable auxiliar.. en este caso Textovar. El lugar que ocupa Textovar es siempre el mismo. Saludos
es un poco complicado de entender si no tenes muy claro el tema de los punteros, te sugiero busques en el foro "punteros" o "pointers" y hay un documento que yo puse un link que te puede aclarar un poco el tema...
Sí se como funcionan los punteros, los estudié cuando me dio por el c, aunque no pasé de las listas enlazadas.
Lo que no se es si me he explicado yo, si texto[0] contiene "a", cuando yo hago textovar=texto[0] entonces textovar vale "a", textovar está en la misma posición de memoria, lo que cambia es su valor, por eso no entiendo que tiene de malo el ejemplo de
[code language="bennu"]loop
if(algo)i=0;end
if(otra)i=1;end
TextoVar = Texto;end[/code]
ese ejemplo esta bien... el que pusiste primero es el que esta mal.
claro, ese ejemplo esta bien... yo pense que hablablas del primer ejemplo...
Yo tambien creia que hablabas del primer ejemplo, el segundo ejemplo esta correcto, no me fije bien en el mensaje tuyo ya que tenia mucho sueño, y estaba a punto de irme a dormir.
Ja ja, era lo que me imaginaba, un malentendido. Muchas gracias por intentar resolver mis dudas aun teniendo sueño.
Un abrazo a todos.