Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Alguna funcion como la Strtok (https://www.clubdelphi.com/foros/showthread.php?t=38818)

h2o_mx 29-12-2006 21:45:10

Alguna funcion como la Strtok
 
que tal amigos, necesito saber si en delphi existe una
funcion como en "c" que es la strtok que separa en tokens
las palabras de una cadena.

tengo esta cadena "001 DESCRIPCION 12.21",
quiero ir guardando cada token en una variable diferente
quedando mas o menos asi
va1 = "001"
va2 = "DESCRIPCION"
va3 = "12.21"

espero alguien me pueda ayudar, gracias de antemano.

Saludos.

Crandel 30-12-2006 04:39:22

No existe ninguna que realice algo similar, pero basandome en el link que nos enseño federico en este hilo, donde usa la clase TParser, podemos construir algo asi:

Código Delphi [-]
function StrTok(str: string): TStrings;
var
  words: TStrings;
  MemStream: TStringStream;
  Parser: TParser;
begin
  words := TStringList.Create;
  MemStream := TStringStream.Create(str);
  MemStream.Position := 0;
  Parser := TParser.Create(MemStream);

  words.Add(Parser.TokenString);
  while not (Parser.NextToken = toEof) do
    words.Add(Parser.TokenString);

  Parser.Free;
  MemStream.Free;
  Result := words;
end;

y lo usamos asi:

Código Delphi [-]
var
  words: TStrings;
begin
  words := Strtok(Edit1.Text);
  Memo1.Lines := words;
  words.Free;
end;

donde Edit1 contiene la cadena y en Memo1 mostramos los resultados, cada palabra es una linea del Memo.

seoane 30-12-2006 05:25:48

:confused: ¿y por que no usar un simple TStringList?

Código Delphi [-]
  with TStringList.Create do
  try
    QuoteChar := '"';
    Delimiter := #32;
    DelimitedText:= Str; // Str es la cadena de exto
    // Ahora tienes separado el texto en lineas
    Var1:= Strings[0];
    Var2:= Strings[1];
    Var3:= Strings[2];
  finally
    Free;
  end;
end;

Por cierto, no encuentro la clase TParser ¿en que unit esta? :confused:

Crandel 30-12-2006 12:11:07

Cita:

Empezado por seoane
:confused: ¿y por que no usar un simple TStringList?

Se puede usar perfectamente, pero el resultado es diferente.

Si la idea es tener un solo delimitador (en este caso espacio en blanco) sumado al QuoteChar, el metodo que escribiste con TStringList es perfecto.

Si queres separar las palabras que esten formadas solo las letras y guiones bajos, entonces es mejor el método con TParser.

Dependerá de la aplicación.

Cita:

Empezado por seoane
Por cierto, no encuentro la clase TParser ¿en que unit esta? :confused:

en la Unit Classes.

Lepe 30-12-2006 13:56:42

Al menos en BDS 2006 está en win32\rtl\common\classes.pas en la línea 1099 según Grep Search jejeje.

Los que no tienen BDS, a pelo :p

En DUnit tambien para BDS viene una unidad xpLex, el comentario dice (para roman):
Cita:

Unit : xpLex

Description : provides a lexical analyzer with which the xpParser can
rely on to provide tokens from a source stream. This code
has a very strong resemblance the TPARSER class found in
delphi's classes unit. However, when I was just about done and
ready to release, I discovered that Tparser cannot deal with text
inside a comment and would get tripped up trying to parse:
{ this is delphi's fault }.

Programmer : mike

Date : 05-Aug-2000
Saludos

seoane 30-12-2006 16:36:13

Pues no conocía esta clase (TParser), y parece muy interesante.

h2o_mx 08-01-2007 17:15:10

que tal amigos, perdon por tardar en mi respuesta, les
agradezco mucho, me ha ido de maravilla con lo que me
recomendaron, muy util todo, gracias y Saludos.


La franja horaria es GMT +2. Ahora son las 08:50:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi