Announcement

Collapse
No announcement yet.

string

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • string

    hi,

    wie kann ich aus einem string alle zeichen auser 0 bis 9 entfernen?

    gruß
    lehrling

  • #2
    <pre>

    // 1. methode der normale Ansatz<br>

    function DeleteNonNumbers(const Value: String): String;
    var
    I: Integer;
    begin
    Result := '';
    for I := 1 to Length(Value) to
    if Value[I] in ['0'..'9'] do
    Result := Result + Value[I];
    end;<br>
    <br>
    // 2. Ansatz, schneller <br>

    function DeleteNonNumbers(const Value: String): String;
    var
    I: Integer;
    P: PChar;
    begin
    SetLength(Result, Length(Value));
    P := PChar(Result);
    for I := 1 to Length(value) do
    if Value[I] in ['0'..'9'] then
    begin
    P^ := Value[I];
    Inc(P);
    end;
    SetLength(Result, P - PChar(Result));
    end; <br>

    </pre>

    Die erste Methode braucht im ungünstigen falle genau Length(Value) mal die Reallozierung des Strings result. z.B. ein String aus 10 NULLEN würde dann 10 mal den Memory Manager bemühen um Result zu vergrößern.<br>

    Dieses Mancko wird im zweiten Ansatz auf minimal 2 Allozierungen reduziert. Im ungünstigen Falle werden aber Length(value) bytes zu viel alloziert, nämlich wenn z.B. Value aus 10 mal 'A' besteht würden 10 Bytes zu viel alloziert.

    Gruß hage

    Comment


    • #3
      Hallo Hagen,<br>KLASSE.<br>Vielen Dank für diesen Beitrag. Der Beitrag hat mir meine eigene Faulheit vor Augen geführt. Früher,
      als 286er noch der Hammer waren, war der 2. Ansatz der normale Ansatz.<br>Wenn man mit den beiden Funktionen etwas herumspielt, stellt sich heraus, dass der 2. Ansatz nicht nur schneller, sondern erheblich schneller ist. <br>Jens Schuman

      Comment

      Working...
      X