Funciones Strings

Started by Phreak, March 25, 2008, 09:30:18 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Phreak

Bueno, ahi va otras funciones para manejo de strings en memoria

CODIGO:
[code language="bennu"]
//------------------------------------//
//Tipo de dato
//------------------------------------//
#DEFINE MyString CHAR POINTER


//------------------------------------//
//Convierte MyString en STRING
//------------------------------------//
FUNCTION MyString get_string(STRING text)
PRIVATE
   MyString str;
   INT n;
BEGIN
   str=realloc(str,sizeof(char)*(len(text)+1));
   
   FROM n=0 TO len(text)
      str[n]=text[n];
   END
   str[len(text)+1]=0;
   
   RETURN str;
END


//------------------------------------//
//Convierte STRING en MyString
//------------------------------------//
FUNCTION STRING set_string(MyString text)
PRIVATE
   STRING str="";
   INT n;
BEGIN
   n=0;
   WHILE (text[n]!=0)
      str=str+text[n];
      n++;
   END

   RETURN str;
END


//------------------------------------//
//Inicia un string
//------------------------------------//
FUNCTION MyString String_New();
PRIVATE
   MyString text;
BEGIN
   text=alloc(sizeof(CHAR));
   RETURN text;
END


//------------------------------------//
//Setea un string
//------------------------------------//
FUNCTION MyString String_Set1(MyString text,STRING Valor);
BEGIN
   free(text);
   text=get_string(Valor);

   RETURN text;
END

#DEFINE String_Set(t,v) t=String_Set1(t,v)

//------------------------------------//
//Devuelve el string
//------------------------------------//
FUNCTION STRING String_Get(MyString text)
BEGIN
   IF (text)
      RETURN (set_string(text));
   ELSE
      RETURN "";
   END
END


//------------------------------------//
//Libera el string
//------------------------------------//
FUNCTION STRING String_Kill1(MyString POINTER text)
BEGIN
   free([text]);
   [text]=NULL;
END

#DEFINE String_Kill(t) String_Kill1(&t)
[/code]


EJEMPLO:
[code language="bennu"]
PROCESS TEST()
PRIVATE
   MyString text;
   STRING aux;
BEGIN
   text=String_New();                 //Crea el texto
   String_Set(text,"prueba");        //Setea el texto
   aux=String_Get(text);              //Develve el texto
   say(aux);            //aux="prueba"
   String_Kill(text);                      //Elimina el texto
   say(text);            //text = NULL
   aux=String_Get(text);              //Pide un texto que ya no existe
   say(aux);            //aux=""
END
[/code]

Saludos

SplinterGU

EDIT: Lei mal... y cual es la aplicacion para esto?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Phreak

#2
para poder hacer listas dinamicas de strings... que actualmente no se puede , vos me dijiste cuando lo intente hacer hace un tiempo que fenix cambia los identificadores en memoria... o no se bien como es..


o sea...
no podes hace
STRING * lista;

lista = alloc(sizeof(string) *10)
esto no se puede hacer... va , a mi x lo menos me fallaba