Absolute Häufigkeit und Datenvergleich

Alles, was Reporting und Drucken betrifft.
Fehlermeldungen, Fragen usw.
Themen zu einzelnen Formularen bitte im speziellen Forum ...

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Christoph Sprung
Beiträge: 415
Registriert: Montag 3. Dezember 2018, 18:43
Schulform: WbK (a. D.)

Re: Absolute Häufigkeit und Datenvergleich

Beitrag 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.
Dateianhänge
StringRipTStringList.rtm
(7.25 KiB) 23-mal heruntergeladen
StringRip_haystack.rtm
(6.88 KiB) 23-mal heruntergeladen
Grüße aus Bochum
Christoph Sprung
malte.christian
Beiträge: 85
Registriert: Donnerstag 21. Januar 2021, 07:52
Schulform: Förderschule

Re: Absolute Häufigkeit und Datenvergleich

Beitrag von malte.christian »

Vielen Dank, das schaue ich mir an.
Viele Grüße
Malte Christian
Benutzeravatar
wschrewe
Fachberater*in
Beiträge: 1686
Registriert: Dienstag 25. September 2018, 17:36
Schulform: BK (Pensionär)
Kontaktdaten:

Re: Absolute Häufigkeit und Datenvergleich

Beitrag 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;
Mit freundlichen Grüßen
Walter Schrewe
"If all else fails, read the instructions" (Donald E. Knuth, letzter TeX - Hilfehinweis)
Antworten

Zurück zu „Drucken / Reporting“