AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi WhiteSpaceTrim: Schnellere Version, wie aber trimmen?
Thema durchsuchen
Ansicht
Themen-Optionen

WhiteSpaceTrim: Schnellere Version, wie aber trimmen?

Ein Thema von Go2EITS · begonnen am 12. Apr 2009
Antwort Antwort
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#1

WhiteSpaceTrim: Schnellere Version, wie aber trimmen?

  Alt 12. Apr 2009, 14:12
Hallo, ich habe meine neuen Kenntnisse durch Euch bei nachfolgender Funktion ausprobiert,
die in einem String Leerräume entfernt, wenn diese mehr als 1x vorkommen:
Delphi-Quellcode:
program CleanWhiteSpace;

{$APPTYPE CONSOLE}

uses
  //FastMM4, FastMove,
  //Optimize,
  //RTLVclOptimize,
  SysUtils, // Für Profiler.inc notwendig
  Windows; // Für Profiler.inc notwendig
{$include Profiler.inc}
var xx,ii:Integer; // Nur für den Testlauf notwendig

// Original Version
// [EDIT] Code gelöscht. Veröffentlichung ist auf anderen Seiten nicht erlaubt.
function OldwhitespaceTrim(str : string) : string;
begin
// Leer
end;
//... Original Version ENDE

// Datum: 12.04.2009
// Löscht Leerräume, wenn diese mehr als 1x vorkommen.
//
// Neue Version
function WhiteSpaceTrim(const Str: string): String;
var
  i, Len,space: Integer;
  CurIn, CurOut: ^Char;
begin
  Len := Length(Str);
  SetLength(Result, Len);
  CurIn := Pointer(Str);
  CurOut := Pointer(Result);
  space:= 0;
  
  for i := 1 to Len do
  begin
  if space <> 1 then
      begin
      CurOut^ := CurIn^;
      Inc(CurOut);
      if(CurIn^ = ' ') then inc(space);
      end
      else
      if Curin^ <> ' then
         begin
         CurOut^ := CurIn^;
         Inc(CurOut);
         space := 0;
      end;
  inc(curin);
end;
  //SetLength(Result, Integer(CurOut) - Integer(Pointer(Result)));
  SetLength(Result, CurOut - PChar(Pointer(Result)));
end;
begin
Writeln;
// [EDIT] Code gelöscht...

Writeln('Teste... WhiteStringTrim -neu- ');
for xx := 1 to 10 do
   begin
   Start;
   for ii :=1 to 100000 do whitespaceTrim(' auf der Mauer ');
   Stopp;
   end;
Writeln('Ergebnis muss -auf der Mauer- sein:');
Writeln(whitespaceTrim('-'+' auf der Mauer '+'-'));Writeln;

Writeln('- ProgrammEnde mit [ENTER] -');Readln;
end.
Das Original mit fast 1000ms langsam, die neue Version benötigt nur ca. 40ms im vorliegendem Beispiel. Schön wäre noch eine Version, die die Leerräume links und rechts entfernt.
Dann noch ein LF zu beseitigen wäre wohl kein Problem.
Angehängte Dateien
Dateityp: 7z profiler_109.7z (374 Bytes, 0x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz