Conseils

Comment analyser une chaîne délimitée dans une liste de chaînes

Comment analyser une chaîne délimitée dans une liste de chaînes


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.

Il est souvent nécessaire de fractionner une chaîne de caractères en un tableau de chaînes en utilisant un caractère comme séparateur. Par exemple, un fichier CSV ("séparé par une virgule") peut comporter une ligne du type "Zarko; Gajic ;; DelphiGuide" et vous souhaitez que cette ligne soit analysée en 4 lignes (chaînes) "Zarko", "Gajic", "" ( chaîne vide) et "DelphiGuide" en utilisant le point-virgule ";" comme un délimiteur.

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

La seule solution pour analyser une chaîne délimitée consiste à écrire votre propre méthode:

Exemple de chaîne délimitée

~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ParseDelimited (const sl: TStrings; valeur const: chaîne; délimiteur const: chaîne);
var
dx: entier;
ns: chaîne;
txt: string;
delta: entier;
commencer
delta: = longueur (délimiteur);
txt: = valeur + délimiteur;
sl.BeginUpdate;
sl.Clear;
essayer
while Longueur (txt)> 0 do
commencer
dx: = Pos (délimiteur, txt);
ns: = copier (txt, 0, dx-1);
sl.Add (ns);
txt: = Copier (txt, dx + delta, MaxInt);
fin;
enfin
sl.EndUpdate;
fin;
fin;
~~~~~~~~~~~~~~~~~~~~~~~~~

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



Commentaires:

  1. Manus

    Parfaitement)))))))

  2. Geraghty

    Message supprimé

  3. Dugis

    Je suis désolé, mais je pense que vous vous trompez. Je suis sûr. Je peux le prouver. Envoyez-moi un e-mail en MP.

  4. Ambrus

    Je vous suggère de visiter un site, avec une grande quantité de grande quantité sur un thème intéressant.



Écrire un message