Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   meterle mano a un string (https://www.clubdelphi.com/foros/showthread.php?t=4996)

acrophet 05-11-2003 12:26:09

meterle mano a un string
 
Hola, me gustaria saber si teniendo una variable string con un tamaño de caracteres predefinido puedo "meterle mano" y por ejemplo, si en la variable string hay dos palabras, pues coger cada palabra por separado y meterlas en otras nuevas variables.
No se si me he explicado bien, pero basicamente lo que quiero es que teniendo un string poder partirlo en 2, teniendon en cuenta que la estructura siempre sera la misma.
Un saludo.

__hector 05-11-2003 14:06:21

Mirate la funcion copy en la ayuda de delphi, que te permite obtener subcadenas de una cadena original, indicando desde que caracter quieres copiar, y cuantos caracteres copiar.

delphi.com.ar 05-11-2003 15:05:56

Te recomiendo buscar información sobre la clase TParser... por ejemplo: http://www.delphipages.com/tips/copyview.cfm?ID=123


Saludos!

roman 05-11-2003 16:18:26

Cita:

delphi.com.ar comentó:
Te recomiendo buscar información sobre la clase TParser... por ejemplo: http://www.delphipages.com/tips/copyview.cfm?ID=123
Saludos!

Como siempre, es grato comenzar el día aprendiendo algo nuevo. Hice una pequeña búsqueda en Google y me encontré este enlace:

http://www.rimrocksoftware.com/tparser.html

Entre otras cosas establece

Cita:

TParser cannot handle Pascal comments, so it cannot be considered a general purpose parsing class. It is intended to parse a correctly formatted textual form description.
¿Sabes de algún analizador de este tipo que sí maneje comentarios?

// Gracias

delphi.com.ar 05-11-2003 17:48:02

Ahora que lo pienso... me parece que le sugerí matar una mosca con un misil, ademas le puede traer problemas... Con respecto a lo de los comentarios, no conozco si Delphi trae alguna herramienta con este propósito, pero se puede hacer un pequeño procedure con este propósito, ya quen hay que preocuparse por manejar los tipos de datos, comentarios...:
Código:

procedure ParseText(Text: PChar; const AResult: TStrings);
var
  L,
  E: PChar;
  R: string;
begin
  L := Text;
  E := StrEnd(Text);

  while Text < E do begin
    Inc(Text);
    if not (Text^ in ['A'..'Z', 'a'..'z', '_']) then
    begin
      if L <> Text Then
      begin
        SetString(R, L, Text-L);
        AResult.Add(R);
      end;
      L := Text + 1;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ParseText('Delphi es una herramienta Formidable!',  Memo1.Lines);
end;

Aclaro que lo hice recién y no lo probé en profundidad!!!

Mi Procedure Original (Por si a alguien le gusta mas con strings):
Código:

procedure ParseText(AText: string; const AResult: TStrings);
var
  iLen,
  iLastPos,
  iPos: Integer;
begin
  iLastPos := 1;
  AResult.Clear;
  AText := AText + ' '; { Para evitar preguntar reiteradamente por iPos = iLen }
  iLen := Length(AText);
  for iPos := 1 to iLen do
    if not(AText[iPos] in ['A'..'Z', 'a'..'z', '_']) Then
    begin
      if (iPos <> iLastPos) Then
        AResult.Add(Copy(AText, iLastPos, iPos-iLastPos));

      iLastPos := iPos+1;
    end;
end;

Saludos!

Mick 05-11-2003 22:58:11

Existe la posibilidad de usar la
propiedad CommaText del objeto TStrings, aunque tiene sus limitaciones (usa tanto el espacio como la coma para separar las palabras):

Código:

var
  i: integer;
  Palabras:TStringList;
begin

 Palabras:= TStringList.Create;
 try
  Palabras.CommaText:= 'esto es una prueba';

  for i:=0 to Palabras.count-1 do begin
    ShowMessage(Palabras[i]);
  end; 
 finally
  Palabras.Free;
 end;

O por ejemplo si queremos mostralas en un memo (o cualquier otro componente que almacene lineas):

Código:

Memo1.Lines.CommaText:= 'esto es una prueba';
Salud2 !!!

acrophet 06-11-2003 10:04:07

Al final he usado la funcioncita copy y funciona a las mil maravillas!!
Gracias a todos por la ayuda prestada.
Un saludo.:D


La franja horaria es GMT +2. Ahora son las 08:54:04.

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