AGB  ·  Datenschutz  ·  Impressum  







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

String filtern

Ein Thema von zebrafalke · begonnen am 20. Jul 2006 · letzter Beitrag vom 21. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von zebrafalke
zebrafalke

Registriert seit: 25. Feb 2006
155 Beiträge
 
Turbo Delphi für Win32
 
#1

String filtern

  Alt 20. Jul 2006, 20:44
Hallo,

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

gruss
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: String filtern

  Alt 20. Jul 2006, 20:48
Copy()
Markus Kinzler
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: String filtern

  Alt 20. Jul 2006, 20:49
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...
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#4

Re: String filtern

  Alt 21. Jul 2006, 14:43
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: String filtern

  Alt 21. Jul 2006, 14:47
Oder auch SetLength(MeinString, 10); ......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: String filtern

  Alt 21. Jul 2006, 14:56
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
delete(x,11,length(x)); Falls wiedererwarten der String länger als 100000 zeichen lang sein sollte^^
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#7

Re: String filtern

  Alt 21. Jul 2006, 15:05
Zitat von inherited:
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
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^^
  Mit Zitat antworten Zitat
Benutzerbild von zebrafalke
zebrafalke

Registriert seit: 25. Feb 2006
155 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: String filtern

  Alt 21. Jul 2006, 15:19
Ok, habs mit copy() gemacht, funzt super! danke!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: String filtern

  Alt 21. Jul 2006, 15:20
Mit
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: String filtern

  Alt 21. Jul 2006, 15:23
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:07 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