[CODE] String tokenizer.

Started by Erkosone, January 19, 2013, 04:47:47 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone

Os dejo unas funciones que sirven a modo genérico para cualquier programa, se trata de un string tokenizer.


La primera función retorna el número de tokens que contiene el string pasado como parámetro, y la segunda devuelve el token solicitado.
Osea, con strTokenCount() podemos saber el número de "palabras" que contiene un string, y con strGetToken() recuperamos la palabra indicada como parámetro.
A disfrutarlas!


Usos comunes:
- Leer una linea de un archivo de texto y separar palabra a palabra la información leida para usarla como uno prefiera..
- En mi caso, leer de un archivo puntos de control con el formato:  x "espacio" y y poder separar facilmente los datos.







// Funciones de apoyo para simular un string tokenizer de java..
//---------------------------------------------------------
function strtokencount( string str_ );
private
   int strSize;
   int tokensSize;
begin
   strSize = strlen( str_ );
   
   if(strSize == 0)
      Return(0);
   end
   
   for(x=0; x<strSize; x++)
      if(str_
  • == " ")
             tokensSize++;
          end
       end
       Return(tokensSize+1);
    end
    //---------------------------------------------------------
    function string strGetToken( string str_, int tokenNumber_ );
    private
       string buffer_ = "";
       int strSize;
       int tokenCounter_;
    begin
       strSize = strlen( str_ ) + 1;
       if(strSize == 0)
          Return(0);
       end
       
       // add SPACE on start position of string..
       str_ = " " + str_;
       
       // Find correct token from str_..
       tokenCounter_ = 0;
       for(x=0; x<strSize; x++)
          if(str_
  • == " ")
             tokenCounter_ ++;
          end
          
          if(tokenCounter_ == tokenNumber_)
             x++;
             break;
          end
       end
       
       // dump token to buffer..
       for(y=x; y<strSize; y++)
          if(str_[y] != " ")
             buffer_ += str_[y];
             else
                break;
          end
       end
       
       Return(buffer_);
    end


Erkosone

No sale bien.. lo dejo en un txt.

Outlaw

Parece útil la verdad, ¡gracias Erko!
"Life is cheap when the bounty is high"

Erkosone

Vaya.. no conocía la función SPLIT() de bennuGD, la cosa cambia bastante usandola jeje.. sorry.. este viejo divero no está al día de todo lo que tiene este lenguaje  ::)
Así está bastante mejor.



function strTokenCount( string str_ );
private
   string tokenList[256];
   int tokens;
begin
   tokens = split(" ",str_,&tokenList,256);
   Return(tokens);
end
//--------------------------------------------------------------
function strGetToken(string str_, int tokenNumber_, string * outToken_);
private
   string tokenList[256];
   int tokens;
begin
   tokens = split(" ",str_,&tokenList,256);
   *outToken_ = tokenList[tokenNumber_-1];
   return(0);
end

SplinterGU

bueno, iba a sugerir exactamente lo mismo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

La he descubierto leyendo la wiki, es bastante útil.

DCelso

 ;D. Ya ves yo tb la iba a sugerir . Que sería de mi sin el split para hacer .inis.  :)
Monstruos Diabólicos

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