Equivalente a strdel()

Started by FreeYourMind, April 05, 2010, 08:42:52 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Existe una funcion equivalente a la de DIV strdel(cadena, 0, 1) que borra por ejemplo el último caracter de una cadena de texto ?

SplinterGU

proba con

cadena = SUBSTR( cadena, 0, -1)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Y ya que estamos, el equivalente a esto:

strdel(cadena1, 0, strlen(cadena2));

SplinterGU

substr(cadena, 0, -strlen(cadena2))
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind


FreeYourMind

Tengo otro problema, estoy capturando las teclas que presiono, o mejor dicho, escribo en tiempo real en la pantalla las letras que tecleo, pero Bennu en lugar de capturarme la letra me captura el código ascii de la letra, como hacer para que en lugar del código me devuelva la respectiva letra ?



string c0;

IF (scan_code<>0)
c0+=ascii;
name_text=write(0,100,200,3,c0);
END


SplinterGU

el ascii es el codigo de la tecla, pero tenes que considerar ciertas cosas...

1) podes tener el mapeo incorrecto
2) no interpreta mayusculas como tampoco caracteres que surgan de la pulsacion de otra tecla adicional

no se si eso es lo que decias
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

sipo, tu ejemplo muestra 47 en vez de A y así con todas las teclas, eso es debido a que ascii es un int y al sumar a una cadena un int este se convierte en cadena. Tu necesitas insertar a la cadena un char en vez de un int. He intentado hacer castings de int a char pero bennu no me deja así que la solución la he encontrado usando una variable temporal de tipo char.
A ver, prueba este código para ver lo que te digo

PROGRAM capturatecla;

import "mod_screen"
import "mod_key"
import "mod_video"
import "mod_map"
import "mod_text"
import "mod_draw"
import "mod_math"
import "mod_proc"                           
import "mod_say"
import "mod_grproc"

global
string c0;
char value;
end

PROCESS main()
BEGIN
     full_screen=false;
set_mode(320,240,16);
     set_fps(60,0);
   
write_var(0,100,200,3,c0);

loop
         if (key(_esc)) break; end
IF (scan_code<>0)
value = ascii;
c0=c0+value;
END
         frame;
     end
     
     let_me_alone();
     exit(0,0);   
END

quizas sobren imports, puse unos copiados de otro ejemplo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

Muchas grácias DCElso, te has ganado un karma, me funciona, sólo hay que poner la variable auxiliar declarada como char:

GLOBAL

char value;

....

BEGIN
....

string c0;

IF (scan_code<>0)
value=ascii;
c0+=value;
name_text=write(0,100,200,3,c0);
END


SplinterGU

perdon, si que reconoce mayusculas y otras teclas con combinacion... no es necesario usar una variable temporal...


import "mod_key"
import "mod_say"
import "mod_video"
import "mod_string"

global
   string s;
   lascii=0;

begin
    while(!key(_ESC))
        if ( lascii != ascii )
            s += chr(ascii);
            lascii = ascii ;
            say ( s );
        end
        frame;
    end
end


Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

anda, no me dio por probar chr, está claro que sabe más el diablo por viejo que por pellejo :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

Cachis, he llegado tarde a todo ;D
Ten cuidado con los caracteres <32... o aprovéchalos para borrar, cambiar de cadena/linea, meter tabulaciones...
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)

DCelso

Pero SplinterGU, ¿ por qué no puedo hacer un simple ahormado como este?

s += (char) ascii;

En C/C++/JAVA/C# va canela en rama.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

sera porque "s" es una string?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

¿Qué problema hay con

s+=chr(ascii)

siempre que ascii no valga menos de 32?
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)