Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Convertir una cadena de palabras separadas por # en array (https://www.clubdelphi.com/foros/showthread.php?t=59828)

David 10-09-2008 09:53:13

Convertir una cadena de palabras separadas por # en array
 
hola

tengo un String, de este tipo:

uno#dos#tres

donde he puesto uno, dos y tres, puede haber otros caracteres.

El caso es que quiero una instrucción que me devuelva, 3 grupos uno para cada número.

Por ejemplo:

cad[0] := uno;
cad[1] := dos;
cad[2] := tres;

Un saludo

tcp_ip_es 10-09-2008 10:23:01

Código Delphi [-]
listbox1.items.delimiter:='#';
listbox1.items.delimitertext:=TuString;

David 10-09-2008 11:38:26

pero no quiero usar ningún componente, algo así pero sin un componente.

tcp_ip_es 10-09-2008 11:58:04

pues entonces create una función que recorra la cadena con un while y con un if preguntando por el caracter delimitador, cuando lo encuentre vas metiendo los "cachos" de cadena en donde tu quieras, vease un TStringList.... no se no se me ocurre más cositas...

Caro 10-09-2008 12:16:53

Hola david, si no quieres usar ningun componente entonces usa un StringList y aplicas lo que te ha indicado tpc_ip.

Código Delphi [-]
var
 sl : TStringList;
begin
 sl := TStringList.Create;
 sl.delimiter:='#';
 sl.delimitedtext:='uno#dos#tres';
 
 for i:=0 to sl.Count-1 do
  showmessage(sl[i]);

Si no quieres usar un StringList entonces tendras que hacerlo con las funciones copy y pos.

Saluditos

seoane 10-09-2008 13:27:40

Solo una aclaración no es delimitertext es delimitedtext :p

PD: Si el texto contiene espacios o tabulaciones el TStringList no funcionara, al menos en algunas versiones de delphi que no tienen la propiedad StrictDelimiter

Caro 10-09-2008 13:52:34

Cita:

Empezado por seoane (Mensaje 313075)
Solo una aclaración no es delimitertext es delimitedtext :p

Yo me he copiado directamente lo que tenía el amigo tcp :D, la verdad no me he dado cuenta de ese detallito.

Cita:

Empezado por seoane (Mensaje 313075)
PD: Si el texto contiene espacios o tabulaciones el TStringList no funcionara, al menos en algunas versiones de delphi que no tienen la propiedad StrictDelimiter

En ese caso entonces podríamos utilizar la función ExtractStrings y le indicamos que ignore el espacio y el tabulador en el parseo de la cadena.

Código Delphi [-]
var
 cadena : String;
 i : Integer;
 sl : TStringList;
begin
 sl := TStringList.Create;
 ExtractStrings(['#'], [#32,#9], PCHAR(cadena), sl);
 for i:=0 to sl.Count-1 do
  showmessage(sl[i]);

Saluditos

seoane 10-09-2008 14:06:18

Cita:

Empezado por Caro (Mensaje 313079)
En ese caso entonces podríamos utilizar la función ExtractStrings

No la conocía, parece que delphi tiene funciones para todo :p :)

coso 10-09-2008 15:24:33

hola,
lo mismo sin usar objetos...

Código Delphi [-]
var
        s : array of string;
        txt : string;
        i,j : integer;
begin
        txt := 'uno#dos#tres#cuatro';
        setlength(s,1);

        i := 1;
        j := 0;
        while i < length(txt) + 1 do
        begin
                if txt[i] = '#' then
                begin
                        setlength(s,length(s) + 1);
                        inc(j);
                end
                else
                s[j] := s[j] + txt[i];

                inc(i);
        end;

        for i := 0 to length(s) - 1 do showmessage(s[i]);
        setlength(s,0);
end;

tcp_ip_es 10-09-2008 15:36:21

Cita:

Yo me he copiado directamente lo que tenía el amigo tcp , la verdad no me he dado cuenta de ese detallito
:mad: es que no puede ser que en el foro no se pueda compilar sería muy útil :D:D:p

coso 10-09-2008 15:40:57

¿un compilador en linea? pues seria interesante, si...

tcp_ip_es 10-09-2008 15:46:09

bueno entre Roman, caro, al gonzalez, marcos, dec, Neftali, tu mismo.....y un larguisimo etc ya sois el mejor compilador en linea que puedo tener :p


La franja horaria es GMT +2. Ahora son las 08:20:10.

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