0 users online | 0 Guests and 0 Registered

»

ID #1071

Verschieden Beispiele für die Funktion POS

Mit der Funktion After() extrahierst du den Teil eines Strings, der einem bestimmten Teilstring folgt.
After('ABCDE', 'C') liefert dir als Ergebnis 'DE', After('ABCDE', 'F') liefert einen leeren String.

Die Funktion Between() liefert den String zwischen zwei bestimmten Teilstrings. Between('ABCDE', 'A', 'E')
liefert das Ergebnis 'BCD'.

Die Procedure CustomExtract() ist die abstrakte Implementierung nach zwei Dingen in einem Memo zu suchen.
Die Prozedur untersucht die StringListe sIn zeilenweise nach geklammerten Substrings und wenn es solche
entdeckt, dann wird der Rest der betreffenden Zeile noch nach einem Schlüsselwort abgesucht. Die beiden
Teilstrings werden bei Bedarf verkettet und in der StringListe sOut eingetragen.

 

uses
  StrUtils; // PosEx(), AnsiContainsText()

function After(const s, subStr: String): String;
var
  i: Integer;
begin
  i := Pos(subStr, s);
  if i = 0 then 
    Result := ''
  else 
    Result := Copy(s, i + Length(subStr), MaxInt);
end;

function Between(const s, sLeft, sRight: String): String;
var
  iLeft, iRight: Integer;
begin
  iLeft := Pos(sLeft, s);
  if iLeft > 0 then
  begin
    Inc(iLeft, Length(sLeft));
    iRight := PosEx(sRight, s, iLeft);
    if iRight > 0 then 
      Result := Copy(s, iLeft, iRight - iLeft)
    else 
      Result := '';
  end 
  else 
    Result := '';
end;

procedure CustomExtract(sIn, sOut: TStrings; const keyword: String);
var
  i: Integer;
  s: String;
begin
  sOut.Clear;
  for i := 0 to Pred(sIn.Count) do
  begin
    s := Between(sIn[i], '(', ')');
    if s <> '' then
    begin
      if AnsiContainsText(After(sIn[i], ')'), keyword) then
        s := s + ' ' + keyword;
      sOut.Add(s);
    end;
  end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  CustomExtract(Memo.Lines, ListBox.Items, 'Konto');
end;

Dieser Beitrag aus dem Forum Delphi-Praxis diente als Grundlage.

Tags: -

Related entries: -

Last update: 2010-08-28 10:14
Author: Rolf Warnecke
Revision: 1.0

{writePrintMsgTag} {writeSend2FriendMsgTag} {writePDFTag}
Please rate this FAQ:

Average rating: 0 (0 Votes)

completely useless 1 2 3 4 5 most valuable

You can comment this FAQ

Most popular FAQs RSS

  1. Display Resolution change
    (30 views)
  2. Scanned a Picture
    (13 views)

Latest FAQs RSS

  1. Scanned a Picture
    (2010-11-19 06:01)
  2. Display Resolution change
    (2010-02-09 18:01)