Analyser une chaîne délimitée dans une liste de chaînes (Delphi)

Il y a plusieurs fois où vous devez diviser un chaîne dans un tableau de chaînes en utilisant un caractère comme séparateur. Par exemple, un fichier CSV (séparé par des «virgules») peut avoir une ligne comme «Zarko; Gajic;; DelphiGuide "et vous voulez que cette ligne soit analysée en 4 lignes (chaînes)" Zarko "," Gajic "," "(chaîne vide) et" DelphiGuide "en utilisant le caractère point-virgule"; "comme délimiteur.

Delphi fournit plusieurs méthodes pour analyser une chaîne, mais vous constaterez peut-être qu'aucune ne fait exactement ce dont vous avez besoin. Par exemple, la méthode ExtractStrings RTL utilise toujours des guillemets (simples ou doubles) pour les délimiteurs. Une autre approche consiste à utiliser leDélimiteur etDelimitedText propriétés de la classe TStrings, mais malheureusement, il existe un bogue dans l'implémentation ("à l'intérieur" de Delphi) où le caractère espace est toujours utilisé comme délimiteur.

~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ParseDelimited (const sl: TStrings; valeur const: chaîne; délimiteur const: chaîne);

instagram viewer

var
dx: entier;
ns: chaîne;
txt: chaîne;
delta: entier;
commencer
delta: = Longueur (délimiteur);
txt: = valeur + délimiteur;
sl. BeginUpdate;
sl. Clair;
essayer
tandis que Longueur (txt)> 0 do
commencer
dx: = Pos (délimiteur, txt);
ns: = Copier (txt, 0, dx-1);
sl. Ajouter (ns);
txt: = Copier (txt, dx + delta, MaxInt);
fin;
enfin
sl. EndUpdate;
fin;
fin;
~~~~~~~~~~~~~~~~~~~~~~~~~

Utilisation (remplit Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide ','; ')

instagram story viewer