Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#3

AW: Substrings Extract Delimited Values

  Alt 2. Nov 2023, 22:15
Fällt Euch etwas ein, um die EXtraktion hier zu beschleunigen? Macht es Sinn mit Pchar zu arbeiten?
Laufzeit ca. 4 Millisekunden:
Delphi-Quellcode:
const
  MAX_COUNT = 100000;
  
  function GetNextItem(const pmcDelimiter: Char; pmSrcPos: PChar; out pmNextPos: PChar): String;
  var
    pStart: PChar;
  begin
    if pmSrcPos = Nil then
    begin
      pmNextPos := pmSrcPos;
      Exit(''); //=>
    end;

    while pmSrcPos^ in [#9, ' '] do Inc(pmSrcPos); // Trim left
    pStart := pmSrcPos;
    repeat
      if pmSrcPos^ = #0 then
      begin
        pmNextPos := Nil;
        Break; //=>
      end
      else if pmSrcPos^ = pmcDelimiter then
      begin
        pmNextPos := pmSrcPos + 1;
        Break; //=>
      end
      else
        Inc(pmSrcPos);
    until False;
    while (pmSrcPos > pStart) and (pmSrcPos[-1] in [#9, ' ']) do Dec(pmSrcPos); // Trim right
    SetString(Result, pStart, pmSrcPos - pStart);
  end;

var
  p: PChar;
  src: String;
  timer: TPrecisionTimer;
begin
  for var i: Integer := 1 to MAX_COUNT do
    src := src + i.ToString + ',';
  Delete(src, Length(src), 1);

  var sList := TStringList.Create;
  try
    timer.Start;
    p := PChar(src);
    while p <> Nil do
      sList.Add(GetNextItem(',', p, p));
    ShowMessage(Format('Count: %d, Time: %s', [sList.Count, timer.Stop]));
  finally
    sList.Free;
  end;
Ohne Gewähr!

Bis bald...
Thomas
  Mit Zitat antworten Zitat