Trouver la position (ligne, et "colonne") d'un mot dans un tstrings

Contenu du snippet

Le but de cette fonction est de trouver la position (X, Y) d'un mot dans une TStrings (Tmemo, TListBox, TComboBox...)

Cette fonction s'utilise comme la fonction delphi "pos", et le résultat renvoyé est un TPoint.

Remarques:
Les TStrings étant des tableaux de chaînes dont l'indice commence à 0, je renvoie donc 0 si le mot se trouve sur la 1ere ligne, n-1 s'il se trouve sur la ligne n°n, et -1 s'il n'a rien trouvé.

Chaque chaine de la TString est un tableau dont l'indice commence à 1. Je renvoie donc 1 si le mot commence en début de chaine... et 0 si rien n'a été trouvé

Donc X et Y commencent respectivement à 1 et 0 (rien ne vous empêche de modifier ca, si vous voulez que ce soit plus "cohérent", j'ai personnellement préféré respecter la logique Delphi, surtout que les données sont directement utilisables telles qu'elles si on doit retravailler la TStrings)

Je vous propose cette fonction parceque j'en avais besoin et que finalement, j'ai trouvé une facon astucieuse de répondre au problème.

Source / Exemple :


function PosInStrings(Substr: string; s : TStrings) : TPoint;
var SLtemp : TStringList;
    p      : Integer;
begin
  p := Pos(Substr, s.Text);

  if p>0 then begin
    SLtemp := TStringList.Create;
    try
      SLtemp.Text := Copy(S.Text, 1, p);
      RESULT.Y := SLtemp.Count-1;
      RESULT.X := Pos(Substr, s[RESULT.Y]);
    finally
      SLtemp.Free;
    end;
  end
  else begin
    RESULT.X := -1;  // TStrings commencent à 0
    RESULT.Y := 0;   // string commence à 1
  end;
end;

Conclusion :


Si vous connaissez une autre manière de faire, n'hésitez pas à m'en faire part.
Et n'hésitez pas à laisser des commentaires...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.