Conselhos

Como analisar uma cadeia de caracteres delimitada em uma lista de cadeias

Como analisar uma cadeia de caracteres delimitada em uma lista de cadeias



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Muitas vezes, você precisa dividir uma sequência em uma matriz de sequências usando um caractere como separador. Por exemplo, um arquivo CSV (separado por vírgula) pode ter uma linha como "Zarko; Gajic ;; DelphiGuide" e você deseja que essa linha seja analisada em 4 linhas (cadeias) "Zarko", "Gajic", "" ( string vazia) e "DelphiGuide" usando o caractere ponto-e-vírgula ";" como um delimitador.

O Delphi fornece vários métodos para analisar uma string, mas você pode achar que nenhum deles faz exatamente o que você precisa. Por exemplo, o método RTL ExtractStrings sempre usa caracteres de aspas (simples ou duplos) para delimitadores. Outra abordagem é usar oDelimitador eDelimitedText propriedades da classe TStrings - mas, infelizmente, há um erro na implementação ("dentro" do Delphi) onde o caractere de espaço é sempre usado como um delimitador.

A única solução para analisar uma string delimitada é escrever um método próprio:

Exemplo de string delimitada

~~~~~~~~~~~~~~~~~~~~~~~~~
procedimento ParseDelimited (const sl: TStrings; valor const: string; delimitador const: string);
var
dx: inteiro;
ns: string;
txt: string;
delta: inteiro;
início
delta: = Comprimento (delimitador);
txt: = valor + delimitador;
sl.BeginUpdate;
sl.Clear;
experimentar
enquanto Comprimento (txt)> 0
início
dx: = Pos (delimitador, txt);
ns: = Copiar (txt, 0, dx-1);
sl.Add (ns);
txt: = Copiar (txt, dx + delta, MaxInt);
fim;
finalmente
sl.EndUpdate;
fim;
fim;
~~~~~~~~~~~~~~~~~~~~~~~~~

Uso (preenche o Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')


Assista o vídeo: Biologia - Ecologia: Cadeia Alimentar (Agosto 2022).