Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String filtern (https://www.delphipraxis.net/73634-string-filtern.html)

zebrafalke 20. Jul 2006 21:44


String filtern
 
Hallo,

Wie kann ich aus einem String die ersten 10 Zeichen heraufiltern und den Rest löschen?

gruss

mkinzler 20. Jul 2006 21:48

Re: String filtern
 
Copy()

ferby 20. Jul 2006 21:49

Re: String filtern
 
Hallo


Delphi-Quellcode:
irgendeinstring: string;


irgendeinstring:='fsdfhgdasfjgkhtrsdhjf';


irgendeinstring:=copy(irgendeinstring,1,10);

Ist nicht getestet, müsste aber gehen.

Falls nicht, schau dir einfach die Copy funktion an, bzw. es gibt auch eine Delete Funktion, die dir helfen dürfte...

Noobinator 21. Jul 2006 15:43

Re: String filtern
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:string;
begin
x:=edit1.Text;
delete(x,11,100000);
label1.Caption:=x;
end;
damit schneidest du alle zeichen ab dem elften ab. auch wenn das ganze recht sinnlosprogrammiert ist ;)

sakura 21. Jul 2006 15:47

Re: String filtern
 
Oder auch
Delphi-Quellcode:
SetLength(MeinString, 10);
...:cat:...

inherited 21. Jul 2006 15:56

Re: String filtern
 
Zitat:

Zitat von Noobinator
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:string;
begin
x:=edit1.Text;
delete(x,11,100000);
label1.Caption:=x;
end;
damit schneidest du alle zeichen ab dem elften ab. auch wenn das ganze recht sinnlosprogrammiert ist ;)

Doch besser
Delphi-Quellcode:
delete(x,11,length(x));
Falls wiedererwarten der String länger als 100000 zeichen lang sein sollte^^

Noobinator 21. Jul 2006 16:05

Re: String filtern
 
Zitat:

Zitat von inherited
Zitat:

Zitat von Noobinator
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:string;
begin
x:=edit1.Text;
delete(x,11,100000);
label1.Caption:=x;
end;
damit schneidest du alle zeichen ab dem elften ab. auch wenn das ganze recht sinnlosprogrammiert ist ;)

Doch besser
Delphi-Quellcode:
delete(x,11,length(x));
Falls wiedererwarten der String länger als 100000 zeichen lang sein sollte^^

genau dieser ausdruck mit dem length ist mir nicht eingefallen^^

zebrafalke 21. Jul 2006 16:19

Re: String filtern
 
Ok, habs mit copy() gemacht, funzt super! danke!

Hawkeye219 21. Jul 2006 16:20

Re: String filtern
 
Mit
Delphi-Quellcode:
Delete (x, 11, MaxInt);
wird sogar noch eine überflüssige Längenbestimmung vermieden.

@sakura
Ich weiß, ich bin gemein. Aber was ist, wenn der Originalstring wider Erwarten kürzer als 10 Zeichen ist?

Gruß Hawkeye

3_of_8 21. Jul 2006 16:23

Re: String filtern
 
Ich habe schnell folgendes Testprogramm geschrieben:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}
{$O-}

uses
  Windows, SysUtils;

var I, start, time1, time2, time3: Cardinal;
      str, str2: String;
begin
setlength(str, 100000);
Randomize;
for I:=1 to 100000 do str[I]:=Chr(65+Random(26));

start:=GetTickCount;
for I:=1 to 100000 do
begin
str2:=str;
str2:=copy(str2, 1, 10);
end;
time1:=GetTickCount-start;

start:=GetTickCount;
for I:=1 to 100000 do
begin
str2:=str;
delete(str2, 11, length(str2));
end;
time2:=GetTickCount-start;

start:=GetTickCount;
for I:=1 to 100000 do
begin
str2:=str;
setlength(str2, 10);
end;
time3:=GetTickCount-start;

writeln(inttostr(time1)+#13#10+inttostr(time2)+#13#10+inttostr(time3));
readln;
end.
Dabei zeigt sich sehr deutlich, dass Methode 1 (copy) und Methode 3 (setlength) extrem schnell sind, Methode 2 dagegen unmenschlich langsam.

Hier die genauen Ergebnisse (Mehrmals gemessen, dann Durchschnitt gebildet):
Methode 1 (copy): 111 ms
Methode 2 (delete): 21691 ms
Methode 3 (setlength): 40 ms

Die Messwerte gelten für jeweils 100000 mal die ersten 10 Zeichen eines 100000 Zeichen Strings extrahieren.

Man sieht, dass setlength am schnellsten ist.

EDIT: Wenn der String kleiner als 10 Zeichen ist, passiert etwas sehr seltsames.
Der String wird mit #0en aufgefüllt, nur die letzten 2 Zeichen sind dan noch #77 und #83, werden allerdings mit showmessage, das ich zum Testen verwendet habe nicht angezeigt, klar, da die erste #0 als Ende des Strings gewertet wird bei der Übergabe als PChar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz