Array
(
)

strings

Nilpedro
   - 07 fev 2006

Oi pessoal,


[u:a2c8ab0423]Tenho a seguinte string:[/u:a2c8ab0423]

strig := ´um.dois.tres´

[u:a2c8ab0423]E queria passar o array_string, de modo a que o conteudo ficasse:[/u:a2c8ab0423]

array_string[0]:=´um´;
array_string[1]:=´dois´;
array_string[2]:=´tres´;

Sendo strig de tamanho indefinido, ou seja, pode ter X ponto.

Resumindo queria que sempre que encontrasse um ponto array_string incrementava o indice.


Um bocado confuso mas espero ter-me explicado bem

Agradecia a ajuda


José Henrique
   - 07 fev 2006

Use TStringList

#Código


var
strlTeste : TStringList;
i, n : integer;
begin
try
strlTeste := TStringList.Create;
strlTeste.Delimiter := ´.´; este é o separador escolhido pelo você
strlTeste.DelimitedText := ´um.dois.tres´
n := strlTeste.Count;
for i := 1 to strlTeste.Count;
ShowMessage(strlTeste[i]);
finally
strlTeste.Release;
end;
end;



José Henrique
   - 07 fev 2006

Não precisa da variável n
#Código


var
strlTeste : TStringList;
i : integer;
begin
try
strlTeste := TStringList.Create;
strlTeste.Delimiter := ´.´; //este é o separador escolhido pelo você
strlTeste.DelimitedText := ´um.dois.tres´ ;
for i := 1 to strlTeste.Count;
ShowMessage(strlTeste[i]);
finally
strlTeste.Release;
end;
end;




Nilpedro
   - 08 fev 2006

Agradeço a ajuda,


Mas estou trabalhando com Dephi 5 e este comando nao dá. Se tiverem outra sujestao :wink:


Aroldo Zanela
   - 08 fev 2006

Colega,

Acredito que funcione em todas as versões:

#Código


var LineData: String;
I, X: Integer;
FieldsData: TStringList;
begin
FieldsData := TStringList.Create;
LineData := ´um.dois.tres´;
try
while Length(LineData)>0 do
begin
X := Pos(´.´,LineData);
if X>0 then
begin
FieldsData.Add(Copy(LineData, 1, X-1));
LineData := Copy(LineData, X+1, Length(LineData)-x);
end else
begin
FieldsData.Add(LineData);
LineData := ´´;
end;
end;
finally
FieldsData.Free;
end;



Michael
   - 08 fev 2006

Dica: Encapsule a dica do colega Aroldo em uma procedure:

#Código

procedure ParseString(S, Delimiter: string; Strings: TStrings);
var
X: Integer;
begin
while Length(S) > 0 do
begin
X := Pos(Delimiter, S);
if X > 0 then
begin
Strings.Add(Copy(S, 1, X - 1));
S := Copy(S, X + 1, Length(S) - X);
end
else
begin
Strings.Add(S);
S := ´´;
end;
end;
end;


[]´s
[]´s