Einzelnen Beitrag anzeigen

MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: String to Array (schnell)

  Alt 6. Sep 2007, 00:43
Ok, falls du diese optimierte Variante schon probiert hast, dann kann ich dein Problem verstehen. Diese Variante hab ich auch grad eben erst gesehen und probiert, aber die ist schon sauschnell...

Meine ist je nach Delimiter 2-4x so langsam (laut Testtool). Aber wie versprochen, kannst du meine ja mal ausprobieren:

Delphi-Quellcode:
function follows(const s,n : string; pos1 : integer) : boolean;
var x : integer;
begin
     for x := 0 to length(n)-1 do
         if n[x+1] <> s[pos1 + x] then
         begin
              result := false;
              exit;
         end;
         
     result := true;
end;

function explode(const n,s : string) : TStringDynArray;
var temp : array of integer;
    Len : integer;
    x, count, laenge : integer;
begin
     x := 1;
     SetLength(temp, 20);
     count := 1;
     temp[0] := 1;

     laenge := Length(s) - Length(n) + 1;

     while x <= laenge do
     begin
          if follows(s,n,x) then
          begin
               inc(x, length(n));
               inc(count);
               if length(temp) < count then
                  SetLength(temp, count + 20);
               temp[count-1] := x;
               continue;
          end;
          inc(x);
     end;
     SetLength(temp, count);

     SetLength(result, length(temp));
     for x := 0 to High(temp)-1 do
     begin
          Len := temp[x+1]-temp[x]-length(n);

          result[x] := copy(s, temp[x], Len);
     end;

     Len := length(s)-temp[high(temp)]+1;
     result[high(temp)] := copy(s, temp[high(temp)], Len);
end;
"Man soll nie mehr essen als mit Gewalt reingeht!" (n.n.)
  Mit Zitat antworten Zitat