|
Usuários |
|
40 Usuários Online
|
|
[Artigos]
Função Split utilizando StringList |
Publicado por cruzeirense : Segunda, Novembro 05, 2007 - 07:08 GMT-3 (1846 leituras)
3 Comentários Enviar para um amigo Versão para impressão
|
Veja nesta dica uma função de Split utilizando lista de strings do Delphi, para pegarmos através de um índice uma parte de uma frase ou texto.
O conceito do funcionamento é simples. Primeiro
iremos substituir o caráter de quebra de linha "#13" pelo texto "$Quebra$",
para
evitar conflito
caso exista uma quebra de linha na string. Depois substituímos todos os delimitadores
pelo caracter de quebra de linha e definimos como texto de uma stringlist.
Após isso, verificamos se o índice passado é valido, pegamos a string referente
ao índice e retornamos o caracter "#13" no lugar do texto "$Quebra$".
ATENÇÃO! É necessário a declaração das
units Classes e SysUtils na seção uses.
Segue abaixo a função:
function Split(Valor, Delimitador: String; Item: integer): String;
Var
s : TStringList;
begin
if Valor = '' then exit;
s := TStringList.Create;
try
Valor := StringReplace(Valor, #13, '$Quebra$', [rfReplaceAll]);
s.Text := STringReplace(Valor, Delimitador, #13, [rfIgnoreCase, rfReplaceAll]);
if (Item > 0) and (Item <= s.Count) then
Result := StringReplace(s.Strings[item-1], '$Quebra$', #13, [rfReplaceAll])
else
Result := '';
finally
s.Free;
end;
end;
Exemplo de funcionamento:
var
Texto: String;
begin
Texto := Split('Meu Nome é Renato', ' ', 2);
ShowMessage(Texto);
end;
O resultado disso será uma mensagem com a palavra "Nome".
Um outro exemplo sobre separação de Strings com índices foi publicado pelo
amigo Kelver Merlotti, no artigo Implode e Explode do PHP para o Delphi
Qualquer dúvida comente aqui.
Abraços!
Dica enviada pelo usuário: cruzeirense
Contato: cruzeirense@oi.com.br
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
por: cmainfor : Nov 05, 2007 - 10:15 (Informações sobre o membro | Enviar uma mensagem)
http://
|
É isso que torna o Delphi tão fantástico, são inúmeras possibilidades.
Mas eu fico com ExtractStrings
var
S:TStringList;
begin
S := TStringList.Create;
ExtractStrings([' '],[],Pchar('Delphi é Demais'),S);
Showmessage(S.Strings[2]);
end;
|
por: Khundalini (cartouche@ig.com.br) : Dez 11, 2007 - 12:39 (Informações sobre o membro | Enviar uma mensagem) http:// | É possível implementar esta mesma função sem TStringList, usando a função PosEx() da unit StrUtils. Exemplo:
function Split(Value, Delimiter: String; Item: integer): String;
var
lItem, lStart, lDelimPos: Integer;
begin
lItem := 0;
lStart := 0;
Result := EmptyStr;
lDelimPos := Pos(Delimiter, Value);
while (lDelimPos > 0) and (lItem < Item) do
begin
Inc(lItem);
lStart := lDelimPos + Length(Delimiter);
lDelimPos := PosEx(Delimiter, Value, lDelimPos + 1);
end;
Result := Copy(Value, lStart, lDelimPos - lStart);
end;
var
Texto: String;
begin
Texto := Split('Meu Nome é Rubem Rocha', ' ', 1);
WriteLn(Texto); // vai imprimir 'Nome'
WriteLn(Eoln);
end. | [ Comentários não permitidos para usuários anônimos. Por gentileza, registre-se ou conecte-se ao sistema
por: Khundalini (rrocha@fpf.br) : Mar 15, 2008 - 10:05 (Informações sobre o membro | Enviar uma mensagem) http:// |
Mas, se mesmo assim, quiser fazer uso de TStringList, e seu delimitador for um único caracter, uma versão mais compactada pode ser construída, assim:
function Split(const s: String; sPos: integer; Delim: Char): string;
begin
Result := EmptyStr;
if Length(Trim(s)) > 0 then
with TStringList.Create do
try
Delimiter := Delim;
DelimitedText := s;
if (sPos >= 1) and (sPos <= Count) then
Result := Strings[sPos - 1];
finally
Free;
end;
end;
Sds., Rubem Rocha Manaus, AM
| [ Comentários não permitidos para usuários anônimos. Por gentileza, registre-se ou conecte-se ao sistema
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|