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. Warde

    Je partage entièrement votre avis. L'idée est bonne, je la soutiens.

  2. Metaur

    Pensez juste!

  3. Jule

    You have found the site with which you are interested in the question.

  4. Lindeberg

    Non.

  5. Whitney

    C'est bon, c'est la pièce divertissante

  6. Bazahn

    Je joins. Ça arrive. Discutons de cette question.

  7. Pleoh

    Il y a quelque chose là-dedans aussi, cela me semble une bonne idée. Je suis d'accord avec toi.



Écrire un message