AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion optimieren

Ein Thema von Pseudemys Nelsoni · begonnen am 30. Aug 2005 · letzter Beitrag vom 6. Sep 2005
 
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Funktion optimieren

  Alt 30. Aug 2005, 21:14
Moin,

ich habe folgende funktion(eine von vielen) geschrieben:

Delphi-Quellcode:
function AddTok(const S, T: string; const C: Char; CS: Boolean = False): string;
var
  SLen, SIdx, ResIdx, TokStart, TokLen: Integer;
  TokExists: Boolean;
  CurrentTok: string;
begin
  if T <> 'then
  begin
    SLen := Length(S);
    SetLength(Result, SLen+Length(T)+1);
    ResIdx := 0;
    TokExists := False;
    TokStart := 0;
    TokLen := 0;
    for SIdx := 1 to SLen do
    begin
      if (S[SIdx] <> C) or ((ResIdx > 0) and (Result[ResIdx] <> C)) then
      begin
        Inc(ResIdx);
        Result[ResIdx] := S[SIdx];
      end;
      if S[SIdx] <> C then
      begin
        if TokStart = 0 then
          TokStart := SIdx;
        Inc(TokLen);
      end;
      if ((S[SIdx] = C) or (SIdx = SLen)) and (TokStart > 0) then
      begin
        CurrentTok := Copy(S, TokStart, TokLen);
        if not TokExists then
        TokExists := ((CS) and (lstrcmp(PChar(CurrentTok), PChar(T)) = 0)) or
          ((not CS) and (lstrcmpi(PChar(CurrentTok), PChar(T)) = 0));
        TokStart := 0;
        TokLen := 0;
      end;
    end;
    if (ResIdx > 0) and (Result[ResIdx] = C) then
      SetLength(Result, ResIdx-1)
    else SetLength(Result, ResIdx);
    if not TokExists then
      if Result <> 'then
        Result := Result + C + T
      else Result := Result + T;
  end else
    Result := S;
end;
Sie tut nichts anderes, also ein neues wort(T) ans Ende anzufügen, SOFERN es nicht bereits vorkommt (S). Die Wörter selbst sind durch einen Seperator getrennt (C). CS gibt an ob ein vorhandenes Wort mit dem hinzuzufügenden case sensitive sein muss. Am Ende muss der String (im Erfolgsfall) auch sauber wieder zurückgegeben werden, d.h wenn S am Anfang so aussieht:

Zitat:
....Wort1..Wort2.........Wort3....Wort4..
und ich "Wort5" anfügen will, muss es am Ende so aussehen:

Zitat:
Wort1.Wort2.Wort3.Wort4.Wort5
Die Funktion (s.o) funktioniert.... nur kann man sie noch schneller machen?
Mario
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz