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

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
92 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]  Trabalhando com string no Delphi 6
Publicado por ActiveDelphi : Terça, Janeiro 28, 2003 - 06:44 GMT-3 (36124 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
Administrador A cada nova versão o Delphi traz mais novidades. A nova unit StrUtils traz novas rotinas para o trabalho com strings, complementando àquelas já existentes na unit SysUtils do Delphi 5.
A unit SysUtils tem várias rotinas para manipulação de strings. Você provavelmente está familiarizado com as funções UpperCase, LowerCase, CompareStr, CompareText, IntToStr, IntToHex, StrToInt entre outras. Mas você talvez não tenha notado as rotinas QuotedStr e AnsiQuotedStr que adicionam aspas no inicio e no final de uma string, e em contrapartida a rotina AnsiExtractQuotedStr que retira as aspas. A nova função AnsiDequotedStr torna mais fácil usar o ultimo com strings ordinárias.

function QuotedStr(const S: string): string;
function AnsiQuotedStr(const S: string; Quote: Char): string;
function AnsiExtractQuotedStr(var Src: PChar; Quote: Char): string;
function AnsiDequotedStr(const S: string; AQuote: Char): string;

Existe também a rotina AdjustLineBreaks que modifica um simples line feeds ou carriage returns em uma combinação de dois caracteres usados no Windows. No Delphi 6 você também pode ir por outro caminho convertendo a combinação, ou um simples carriage returns para simples line feeds.

function AdjustLineBreaks(const S: string;
Style: TTextLineBreakStyle =
{$IFDEF LINUX} tlbsLF {$ENDIF}
{$IFDEF MSWINDOWS} tlbsCRLF {$ENDIF}): string;

A rotina StrToIntDef é como um StrToInt. A diferença é que se for informado um valor inválido para a variável S a função retorna o numero passado na variável Default.

function StrToIntDef(const S: string; Default: Integer): Integer;

Para formatar um texto em uma área limitada, você pode usar a rotina de WrapText. Esta rotina faz a pesquisa da linha fornecida do texto e, se for mais longo do que o tamanho máximo especificado ela substitui a última ocorrência antes daquela posição com o texto em BreakStr. A versão mais simples quebra em espaços, em tabs, ou em hífens. Note que esta rotina não quebra as substrings entre aspas.

function WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet; MaxCol: Integer): string; overload;
function WrapText(const Line: string; MaxCol: Integer = 45): string; overload;

Novidades no SysUtils

Diversas novas rotinas foram incluídas na unit SysUtils do Delphi 6. Dentre elas inclui a constante WideString, rotinas básicas de versão WideString, sobrecarga de funções Trim para WideString e rotinas de formação WideString.

const
EmptyWideStr: WideString = '';
NullWideStr: PWideString = @EmptyWideStr;
function WideUpperCase(const S: WideString): WideString;
function WideLowerCase(const S: WideString): WideString;
function WideCompareStr(const S1, S2: WideString): Integer;
function WideSameStr(const S1, S2: WideString): Boolean;
function WideCompareText(const S1, S2: WideString): Integer;
function WideSameText(const S1, S2: WideString): Boolean;
function Trim(const S: WideString): WideString; overload;
function TrimLeft(const S: WideString): WideString; overload;
function TrimRight(const S: WideString): WideString; overload;
function WideFormat( const Format: WideString;
const Args: array of const): WideString;
procedure WideFmtStr(var Result: WideString; const Format: WideString; const Args: array of const);
function WideFormatBuf(var Buffer; BufLen: Cardinal; const Format; FmtLen: Cardinal; const Args: array of const): Cardinal;

As rotinas de conversão existentes de outro tipo básico para strings tem sido melhoradas com versões que pegam valores default – retornando-o se uma exceção for apresentada de qualquer forma. Existe também rotina correspondente ao Try que executa a conversão e retorna True se teve sucesso e False se não teve sucesso. Como um efeito colateral, ele retorna um valor convertido, via um parâmetro.

function StrToFloatDef(const S: string; const Default: Extended): Extended;
function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Double): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Single): Boolean; overload;
function StrToCurrDef(const S: string; const Default: Currency): Currency;
function TryStrToCurr(const S: string; out Value: Currency): Boolean;
function StrToDateDef(const S: string; const Default: TDateTime): TDateTime;
function TryStrToDate(const S: string; out Value: TDateTime): Boolean;
function StrToTimeDef(const S: string; const Default: TDateTime): TDateTime;
function TryStrToTime(const S: string; out Value: TDateTime): Boolean;
function StrToDateTimeDef(const S: string; const Default: TDateTime): TDateTime;
function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean;

Você pode agora converter facilmente entre boolean e string com o default e versões Try descritas anteriormente. A conversão depende dos arrays TrueBoolStrs e FalseBoolStrs. Você os preenche com os valores apropriados e qualquer comparação de string retorna True ou False. Para converter os valores de um boolean para string use a primeira entrada desses arrays.

var
TrueBoolStrs: array of String;
FalseBoolStrs: array of String;

const
DefaultTrueBoolStr = 'True'; // DO NOT LOCALIZE
DefaultFalseBoolStr = 'False'; // DO NOT LOCALIZE

function StrToBool(const S: string): Boolean;
function StrToBoolDef(const S: string; const Default: Boolean): Boolean;
function TryStrToBool(const S: string; out Value: Boolean): Boolean;
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;

Comparação

Diversas funções convenientes que estão disponíveis para comparação de valores de duas ou mais strings. Elas vêm em duas formas: case sensitive e not case sensitive. A primeira tem nomes terminados em str, enquanto as outras têm o nome terminado em Text. O primeiro conjunto de funções olha para uma substring em qualquer lugar em uma string. Cada um retorna um simples True ou False. De qualquer forma, aquela ordem dos parâmetros é revertida na rotina Contains como comparado a outras e a função AnsiPos.

function AnsiContainsText(const AText, ASubText: string): Boolean;
function AnsiStartsText(const ASubText, AText: string): Boolean;
function AnsiEndsText(const ASubText, AText: string): Boolean;
function AnsiContainsStr(const AText, ASubText: string): Boolean;
function AnsiStartsStr(const ASubText, AText: string): Boolean;
function AnsiEndsStr(const ASubText, AText: string): Boolean;

Você também pode comparar uma simples string com um array de valores, retornando um simples flag indicando sua presença ou seu índice dentro do array. O index conta a partir de zero, e – 1 quando o valor não existe. Novamente, o Str são case-sensitive, enquanto o Text não é.

function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;
function AnsiIndexText(const AText: string; const AValues: array of string): Integer;
function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;
function AnsiIndexStr(const AText: string; const AValues: array of string): Integer;

Alterando

Trocar todas as ocorrências de uma substring em uma string com outro valor. Internamente eles usam a rotina StringReplace da unit SysUtils, especificando a troca total como um flag e ignorando o caso quando apropriado.

function AnsiReplaceText(const AText, AFromText, AToText: string): string;
function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
Reverte a ordem dos caracteres na string com a função ReverseString.
function ReverseString(const AText: string): string;

DupeString concatena a string fornecida um determinado número de vezes e retorna o resultado. Você não recebe um erro se o numero de repetições é zero ou menor, mas você não recebe qualquer saída para ambos.

function DupeString(const AText: string; ACount: Integer): string;

StuffString troca a seção nomeada de uma string existente (AStart e ALength) com a nova substring. Você recebe alguns efeitos interessantes se o tamanho for negativo – você começa repetindo alguns caracteres mais adiantados na string original que segue a substituição.

function StuffString(const AText: string; AStart, ALength: Cardinal; const ASubText: string): string;

Seleção

Para escolher uma entrada aleatória de um array de strings, cada um com uma possibilidade igual, use a rotina RandomFrom. Note que esta é uma função sobrecarregada que pode também fazer exame de disposições de números inteiros ou de ponto flutuante.

function RandomFrom(const AValues: array of string): string; overload;

Outra função sobrecarregada, IfThen fornece uma função em linha para strings. Ela avalia a expressão booleana e retorna a primeira string do parâmetro se for verdadeiro, e a segunda se for falso. Esta função pode ser embutida em uma grande expressão e troca uma instrução if para executar o calculo.

function IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ''): string; overload;

Se você precisa de um acesso fácil para as seções de string, você pode usar as seguintes rotinas para extrair o inicio e o fim ou alguma coisa entre eles. Cada um deles usa internamente a função Copy. De fato, o MidStr é basicamente um Copy renomeado.

function LeftStr(const AText: string; const ACount: Integer): string;
function RightStr(const AText: string; const ACount: Integer): string;
function MidStr(const AText: string; const AStart, ACount: Integer): string;

Procurando

A função SearchBuf deixa você procurar um texto arbitrário, ou parte disso, por uma informação em particular. As opções permitem que você pesquise para cima ou para baixo a partir da posição corrente, determina se o caso foi considerado compatível, e especifica se somente as palavras completas serão procuradas. A direção de pesquisa default é do inicio para o final do arquivo. Como você pode ver a partir da constante WordDelimiters, qualquer caractere com exceção de um alfanumérico denota um limite de palavra.

Informe os valores SelStart e SelLength para saltar sobre este ponto do buffer. Neste caso, começamos a pesquisa após ou antes da seleção baseada na presença da opção soDown. O valor de retorno da função é um ponto para o inicio da primeira ocorrência da string de pesquisa dentro da seção denominada de buffer, ou nil se ele não puder ser encontrado lá.

const
{ Default word delimiters are any character
except the core alphanumerics. }
WordDelimiters: set of Char =
[#0..#255] - ['a'..'z','A'..'Z','1'..'9','0'];

type
TStringSeachOption =
(soDown, soMatchCase, soWholeWord);
TStringSearchOptions =
set of TStringSeachOption;

function SearchBuf(Buf: PChar; BufLen: Integer;
SelStart, SelLength: Integer; SearchString: String;
Options: TStringSearchOptions = [soDown]): PChar;

Conclusão

O Delphi tem muita funcionalidade embutida. Enquanto o suporte da manipulação de strings sempre esteve presente no Delphi, a ultima versão adiciona muito mais e move uma parte para outra unit, StrUtils. Esta matéria foi uma pequena introdução sobre as novas potencialidades, e uma revisão de algumas das mais antigas, o objetivo foi deixar você ciente destas rotinas de modo que as possa usar dentro de seus próprios programas.


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