Pessoal, resolvi começar a postar aqui, funções do delphi que normalmente quebram muitos galhos, e, por desconhece-las, acabamos “rebolando” pra criar algo “parecido”. E não pensem que não estou falando de mim! 🙂
Uma função muito interessante e que tem uma enorme utilidade é a função ExtracStrings. Essa função preenche uma lista (StringList), com substrings de uma string.
Imagine que você precise ler um arquivo CSV (separado por ponto-e-vírgula). Dai você pergunta: “Como vou separar as colunas?“; a primeira idéia é criar uma função para localizar (Pos) o primeiro ponto-e-vírgula e extrair o fragmento da string (Copy), e assim sucessivamente, atire a primeira pedra que nunca fez assim!
Pois é! Perdemos nosso precioso tempo reinventando a roda.
Veja a sintaxe da função ExtractString:
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;
- Separator – É um array onde você pode definir vários separadores
- WhiteSpace – É um Array onde você define os caracteres que devem ser Ignorados quando ocorrerem no inicio da String.
- Content – É a String de onde se deseja extrais as substrings
A Função retorna o número de Substrings extraídas.
Veja um pequeno exemplo de utilização:
procedure TForm1.Button1Click(Sender: TObject);
const
SDados = ‘Cristiano Martins Alves; 28 Anos; Casado; São Paulo; SP’;
var
Lista: TStringList;
iRetorno:Integer;
begin
Lista := TStringList.Create;
try
iRetorno := ExtractStrings([‘;’],[‘ ‘],PChar(sDados),Lista);
if iRetorno > 0 then
ShowMessage(Lista.Text);
finally
FreeAndNil(Lista);
end;
end;
Veja o resultado:
Repare que na nossa constante existe um espaço entre o nome e a idade, mas ele foi ignorado conforme definido no segundo parâmetro.
É isso ai pessoal! Não deixem de comentar o blog!
5 março, 2008 at 4:18 pm
Olá, beleza, muito bom este site, gostei deste commando, heheh, eu estou com um programa aqui e estava prestes a usar o Pos hehehe, esse comando caiu como uma luva para os meus propósitos.
25 agosto, 2008 at 9:49 pm
Olá, tdo bm?
Cara, gostei muito desse artigo, mas gostaria de saber +… hehehe
Como faço para ler de um arquivo com várias linhas e gerar um outro arquivo?
Como faço para atribuir a um edit só a primeira coluna?
ex: unidade;contrato;nome;valor.
26 agosto, 2008 at 3:08 am
Olá, Tudo bem e você.
Cara existem muitas forma de se fazer isso. A que eu mais gosto é a seguinte (Obs: Valida se não for um arquivo muito grande como por exemplo umas 100.000).
var
Linhas, Colunas:TStringList;
i,j:integer;
begin
Linhas := TStringList.Create;
Colunas := TStringList.Create;
try
Linhas.LoadFromFile(‘C:\MeuArquivo.txt’); //Carregando arquivo
for i := 0 to Pred(Linhas.Count) do
begin
{Transformando os dados das colunas em Linhas}
Colunas.text := StringReplace(Linhas.Strings[i],’;’,#13,[rfReplaceAll]);
for j := 0 to Pred(Colunas.Count) do
begin
{ Aqui você faz alguma coisa como colocar num Edit
No Meu caso aqui para exemplificar vou apenas mostrar num ShowMessage}
ShowMessage(‘Valor “‘+Colunas.Strings[j] + ‘” da Linha ‘+IntTostr(i+1) +
‘ Coluna ‘+IntToStr(j+1));
end;
end;
finally
Linhas.Free;
Colqunas.Free;
end;
end;
Note que ai eu pego o valor de cada campo em cada linha. No seu exemplo ficaria na coluna 1 o valor é “Unidade”, na 2 é Contrato e assim por diante.
Se o seu arquivo for maior que 100.000 linhas, aconselho que leia diretamente do disco, utilizar uma variavel do Tipo TextFile.
Bom é isso, qualquer dúvida entre em contato.
23 junho, 2009 at 9:33 pm
Olá Cristiano,
O ExtractStrings é excelente, por sinal falei sobre o mesmo na lista Delphi-BR; que chamou a atenção de programadores veteranos, no qual utilizavam um artifício genérico com TStringList.
Parabéns pelo Blog!
[]’s
Silvio Clécio