Seite 4 von 4

Re: Absolute Häufigkeit und Datenvergleich

Verfasst: Dienstag 28. Juni 2022, 13:37
von Christoph Sprung
Guten Tag Herr Christian,

die Funktion 'PosEx', auf die Herrn Kurosinskis Beitrag verweist, scheint im Report-Generator nicht als 'vorgefertigte' Funktion verfügbar zu sein. Bezogen auf Ihr Beispiel "asdf,123,qwerdasd" sehe ich zwei einfache Möglichkeiten (s. Beispielreports im Anhang; die Teilstrings werden zeilenweise in ein Memo-Feld geschrieben). Für den Fall, dass mit TStringList gearbeitet wird, müssen die Teilstrings strikt kommasepariert vorliegen; ggf. vorhandene Leerzeichen sollten für die Listenelemente durch ein anderes ersetzt und später wieder eingefügt werden.

Re: Absolute Häufigkeit und Datenvergleich

Verfasst: Mittwoch 29. Juni 2022, 08:58
von malte.christian
Vielen Dank, das schaue ich mir an.

Re: Absolute Häufigkeit und Datenvergleich

Verfasst: Mittwoch 29. Juni 2022, 13:02
von wschrewe
Sie könnten. z.B. eine globale Funktion definieren:

Code: Alles auswählen

function SubstrAtPos(const aString: String; const SepChar: string; const TokenNum: Integer): String;
var
  lToken : String;
  lTokenNum : Integer;
	lSepCharPos : Integer;
begin
  Result:=aString;
  if Result = '' then Exit;
  if Result[Length(Result)] <> SepChar then Result:=Result + SepChar;
  lTokenNum:=0;
  repeat
    lSepCharPos := Pos(SepChar,Result);
    lTokenNum:=lTokenNum + 1;
    if lSepCharPos > 0 then begin
      lToken:=Copy(Result, 1, lSepCharPos - 1);
      Delete(Result, 1, lSepCharPos);
    end;
  until (lTokenNum = TokenNum) or (Result = '');
  if lTokenNum = TokenNum then
    Result := lToken
  else
    Result:=''
end;
Ein Aufruf könnte dann so aussehen:

Code: Alles auswählen

var
  lPos : integer;
  lStr : String;
begin
  lStr:=SubstrAtPos('asdf,123,qwerdasd',',',2)

// liefert '123';

//Oder in einer Schleife alle Substrings auslesen:
  lPos:=1;
  lStr:=SubstrAtPos('asdf,123,qwerdasd',',',lPos);
  while lStr <> '' do begin
    // Mache irgendwas mit lStr
    // ...
    // ...
    lPos:=lPos + 1;
    lStr:=SubstrAtPos('asdf,123,qwerdasd',',',lPos);
  end;
end;