![]() |
String filtern
Hallo,
Wie kann ich aus einem String die ersten 10 Zeichen heraufiltern und den Rest löschen? gruss |
Re: String filtern
Copy()
|
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... |
Re: String filtern
Delphi-Quellcode:
damit schneidest du alle zeichen ab dem elften ab. auch wenn das ganze recht sinnlosprogrammiert ist ;)
procedure TForm1.Button1Click(Sender: TObject);
var x:string; begin x:=edit1.Text; delete(x,11,100000); label1.Caption:=x; end; |
Re: String filtern
Oder auch
Delphi-Quellcode:
...:cat:...
SetLength(MeinString, 10);
|
Re: String filtern
Zitat:
Delphi-Quellcode:
Falls wiedererwarten der String länger als 100000 zeichen lang sein sollte^^
delete(x,11,length(x));
|
Re: String filtern
Zitat:
|
Re: String filtern
Ok, habs mit copy() gemacht, funzt super! danke!
|
Re: String filtern
Mit
Delphi-Quellcode:
wird sogar noch eine überflüssige Längenbestimmung vermieden.
Delete (x, 11, MaxInt);
@sakura Ich weiß, ich bin gemein. Aber was ist, wenn der Originalstring wider Erwarten kürzer als 10 Zeichen ist? Gruß Hawkeye |
Re: String filtern
Ich habe schnell folgendes Testprogramm geschrieben:
Delphi-Quellcode:
Dabei zeigt sich sehr deutlich, dass Methode 1 (copy) und Methode 3 (setlength) extrem schnell sind, Methode 2 dagegen unmenschlich langsam.
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. 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. |
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