Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2006
h2o_mx h2o_mx is offline
Miembro
 
Registrado: ago 2005
Posts: 17
Poder: 0
h2o_mx Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 30-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
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.
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 30-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿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?
Responder Con Cita
  #4  
Antiguo 30-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cita:
Empezado por seoane
¿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?
en la Unit Classes.
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 30-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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

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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 30-12-2006 a las 14:04:51.
Responder Con Cita
  #6  
Antiguo 30-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pues no conocía esta clase (TParser), y parece muy interesante.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como puedo ejecutar alguna instruccion cuando le doy aceptar a un mensaje confirm() Shidalis PHP 2 09-10-2006 22:33:42
¿Como llamar una funcion de una DLL? paty_rlopez Varios 3 26-06-2006 15:25:25
como creo funcion ? kiringui Varios 9 29-05-2006 09:33:38
¿Cómo funciona la función sum en SQL? nuri SQL 9 11-08-2005 16:12:25
hay alguna funcion en delphi que te ponga los puntos a los miles y millones?... soyhugo Varios 1 24-02-2004 20:52:11


La franja horaria es GMT +2. Ahora son las 14:05:50.


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
Copyright 1996-2007 Club Delphi