Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 15 de Novembro de 2025
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
76 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  [Básico] - DelimitedText CommandText Delimiter QuoteChar
Publicado por rboaro : Segunda, Setembro 09, 2013 - 11:47 GMT-3 (349 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Marcos Salles Antes de mais nada destaco que este artigo , não é um artigo técnico e tenta mostra os passos que envolvem estas propriedades da TString , tão comumentemente encontrada nos diversos códigos espalhados por aí. Vamos começar com uma pergunta clássica: Qual o Resultado de Showmessage(Lista.DelimitedText)?
A resposta é feita com uma pergunta : “O que foi Atribuida para Lista.DelimitedText ?”
Pergunta plausivel. Como saber o fim sem conhecer o começo, faz sentido. Mas só isto basta ?

Não! Não é só isto. Para recuperar o DelimitedText temos que definir previamente três parametros:
O Delimiter. Por padrão é “,” (Virgula)
O QuoteChar. Por padrão é “ (aspas)
O StrictDelimiter. Por padrão é False;

Qual a finalidade de cada um na Atribuição de DelimitedText?

Vamos começar pelo tão mais despercebido mas não menos importante que é a propriedade StrictDelimiter. Esta é talves é a mais simples de ser compreendida da três . Quando definida em False (Valor Padrão) determina que o caractere de espaço também é interpretado como um delimitador . Então passaremos a ter dois delimitadores . O Espaço e mais o que for definido pela propriedade Delimiter

Delimiter …Serve para Separar a String em sequencias de Strings Individuas

Agora ja visto esta duas definiçoes vejamos dois exemplos, logo logo veremos a terceira

Exemplo:
Lista.Delimiter:=’*';
Lista.StrictDelimiter:=False; //valor Padrão
Lista.DelimitedText:=’Marco * Antonio Salles’

Neste exemplo definimos Delimiter=’*’ ; StrictDelimiter=False (Padrao) e não definimos o QuoteChar. Por estar omitido o Delphi assumi o Valor = “ (Padrão) Vamos delimitar a String ( Marco * Antonio Salles ). Delimitar no sentido de Quebra-la em sequencia de Strings . Delimitando teremos Três Sequencias de Strings ou três cadeias de Strings Listadas abaixo :
> Marco
> Antonio
> Salles

Perceba que Salles e Antonio foram divididos pq o espaço tb contou como se fosse um Delimiter ja que propriedade StrictDelimiter esta definida como False.(obs)Para visualizar isto basta fazer um Showmessage(Lista.text) ou percorrer a lista com o comando for …

Agora Vamos fazer o mesmo Exemplo com a mesma String ( Marco * Antonio Salles ) porém definindo a propriedade StrictDelimiter=True .
Delimitando teremos duas sequencias de Strings Listadas abaixo que são
> Marco
> Antonio Salles
perceba que o espaço agora não conta mais e so temos um Delimeter que neste caso é o * (Asterisco)

Da mesma forma podemos Visalizar utilizando Showmessage(Lista.text) ou percorrer a lista com o comando for

Então o que o delimitexText faz é gerar uma sequencia de String ou cadeia de Strings a partir de uma String , seguindo é claro alguns critérios …
Nosso próximo passo passa será o Processo Inverso . Será Definir a String a partir de uma sequencia de String ou cadeia de Strings. Muitas das vezes temos necessidade de fazer este tipo de processo. Mas isto o Delphi ja Faz para Nos sem precisarmos digitar
quase nada . É apenas entender o processo inverso que envolve alguamas armadilhas , vamos a algumas delas .. Imagine a Lista
Lista.add(‘Marco ‘);
Lista.add(‘Antonio Salles’);

Se você prestar atenção , vai perceber que ja fizemos isto no processo Inverso. Isto é , geramos esta sequencia de String a partir da Definição de Lista.DelimitedText:=’Marco*Antonio Salles’ com a Propriedade StrictDelimiter definida em True … Então ja sabemos o que vai dar com propriedade StrictDelimiter definida em True , mas e se a propriedade StrictDelimiter for definida em false (Valor Padrão) O que iremos achar para a instrução abaixo :

ShowMessage(Lista.DelimitedText); Não podemos achar Marco*Antonio*Salles, porque no processo inverso geraria > Três sequencias de String (que é nosso primeiro Exemplo), e nos so temos duas sequencias de String ( o Objeto Lista foi definido somente com duas sequencias ). Como resolver este impasse?
A partir dai entra a propriedade QuoteChar da lista para definir o que se pode chamar de : sequencia de String individuais. Note bem esta definição : sequencia de String individuais. Neste caso é como se Antonio Salles fosse uma Unica String. E como seria esta definição ? o que fazer para o método entender que Antonio Salles
é uma unica String. Cercando a Sequencia de Strings pelo caracter da Propriedade QuoteChar que no por Padrão é "Aspas" , estamos dizendo ao método que elas tem que ficarem juntas

Então a String = Marco * “Antonio Salles” subtende-se que Antonio Salles incorpora uma única String. Lembre-se que isto so tem razão de ser quando a propriedade Lista.StrictDelimiter estiver definida em False , que é o caso que esta sendo tratado agora.

Pensem agora na seguinte situação
Lista.add(‘Marco’);
Lista.add(”);
Lista.Add(‘Antonio Salles’);
Qual seria a propriedade Lista.DelimitedText correspondente ????

Ja vimos que Para recuperar o DelimitedText temos que definir previamente três parametros: e especialmente o StrictDelimiter … Então vamos dividir este exemplo em duas situações

1) Caso
Lista.StrictDelimiter:=False; // espaço também é interpretado como um delimitador
Lista.delimiter:=’*';
Lista.QuoteChar:=’|';

Note que temos dois detalhes .. Como a String Antonio Salles esta junta temos que protege-lo do delimitador de espaço Isto é feito colocando o QuoteChar .. Mas é como atribuir uma String Vazia ??? Uma String vazia é ” . Porém no delphi ” equivale a “” . Então escrevemos o codigo :

Lista.DelimitedText:=’Marco*“”*“Antonio Salles“‘; mas como o QuoteChar foi definido para | é so substituir ficando então no final o seguinte
Lista.DelimitedText:=’Marco*||*|Antonio Salles|;

2)Caso

Lista.StrictDelimiter:=True; // espaço não é interpretado como delimitados
Lista.delimiter:=’*';
Lista.QuoteChar:=’|';

Nosso unico detalhe será atribuir a StringVazia … Ora , uma String Vazia é ” no delphi equivale a “” Então nosso codigo passa a ser

Lista.DelimitedText:=’Marco*“”*Antonio Salles’; mas como o QuoteChar foi definido para | é so substituir ficando no final o seguinte
Lista.DelimitedText:=’Marco*||*Antonio Salles’;

O Exemplo completo do Delphi segue abaixo:

procedure TForm6.Button5Click(Sender: TObject);
var
Lista:TStrings;
begin
Lista:=TStringList.Create;
//Definicoes gerais
Lista.delimiter:='*';
Lista.QuoteChar:='|';
//1)Caso
Lista.StrictDelimiter:=False;
Lista.DelimitedText:='Marco*| |*|Antonio Salles|';
Showmessage(Lista.Text); //Equivalente a
{lista.Add('Marco');
lista.Add(' ');
lista.Add('Antonio Salles');}
end;

//Segundo CASO

Lista.StrictDelimiter:=True;
Lista.DelimitedText:='Marco*||*Antonio Salles';
Showmessage(Lista.Text); //Equivalente a
{lista.Add('Marco');
lista.Add(' ');
lista.Add('Antonio Salles');}
Lista.Free;
end;

Como disse no artigo desde do inicio , não é nada tecnico , mas tentei passar um pouco destas propriedades do Delphi que são muito úteis. Não foi comentado sobre o CommandText , por questões de simplicidade , por se tratar de um
caso particular do DelimitedText na situaçao em que :

CommandText = DelimitedText para

Lista.StrictDelimiter:=True;
Lista.delimiter:=’,';
Lista.QuoteChar:=’”‘;

Vale ainda lembrar que existe uma função ExtractStrings da Unit Classes que retona a partir de uma String as Substrings com a seguinte definiçao:

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.

E a Função ainda retorna o número de Substrings extraídas.

A sua aplicação não será vista neste neste Tuto , por não ser nosso objetivo. Ficamos por aqui , meus agradecimentos e espero ter sido útil . Meu muito obrigado
Link Original do Artigo: http://marcosalles.wordpress.com/2011/02/01/delimitedtext-commandtext-delimiter-quotechar-que-coisa-complicada/


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados