Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In einem String die ersten 4 Zeichen löschen? (https://www.delphipraxis.net/42442-einem-string-die-ersten-4-zeichen-loeschen.html)

Delphi Star 18. Mär 2005 23:09


In einem String die ersten 4 Zeichen löschen?
 
Wie kann man in einem String die ersten oder die letzten 4 Zeichen löschen :?:

gmarts 18. Mär 2005 23:13

Re: In einem String die ersten 4 Zeichen löschen?
 
Mhhh...das ist garnicht so einfach...musste lange suchen, bis ich das fand: :roll:
Zitat:

Unit

System

Kategorie

String-Verarbeitung

Delphi-Quellcode:
procedure Delete(var S: string; Index, Count:Integer);
Beschreibung

Delete entfernt, beginnend mit S[Index], Count Zeichen aus dem String S. S ist eine String-Variable. Index und Count sind Integer-Ausdrücke.

Ist der Wert von Index größer als die Länge von S oder kleiner 1, werden keine Zeichen gelöscht.

Werden mit Count mehr Zeichen angegeben, als beginnend bei Index im String vorhanden sind, wird der Rest des Strings gelöscht. Wenn Count kleiner als 0 ist, werden keine Zeichen gelöscht.

sniper_w 18. Mär 2005 23:14

Re: In einem String die ersten 4 Zeichen löschen?
 
Delphi-Quellcode:
uses StrUtils;

function losche4(const str:string):string;
begin
 Result := '';
 if length(str)<5 then Exit;
 SetLength(Result, Length(str)-4);
 Result := RightStr(str,length(str)-4);
end;

alcaeus 18. Mär 2005 23:18

Re: In einem String die ersten 4 Zeichen löschen?
 
Zitat:

Zitat von sniper_w
Delphi-Quellcode:
uses StrUtils;

function losche4(const str:string):string;
begin
 Result := '';
 if length(str)<5 then Exit;
 SetLength(Result, Length(str)-4);
 Result := RightStr(str,length(str)-4);
end;

Sorry, aber eine sehr uneffiziente Variante. Du kopierst den String komplett, d.h. wenn du einen 1 GB langen String hast, dann hast du danach 2 1 GB lange Strings ;)
Die Loesung mit Delete bedarf wohl keiner weiteren Erklaerung, es geht aber auch mit copy:
Delphi-Quellcode:
Str := Copy(Str, 4, Length(Str)-4);
Greetz
alcaeus

stefan2005 18. Mär 2005 23:43

Re: In einem String die ersten 4 Zeichen löschen?
 
hi,
könne man nicht einfach den Pointer auf die Zeichenkette um 4 Byte weiterschieben ?
so z.B.:
Delphi-Quellcode:
asm
  add [Str],4
end;
?

cu,
stefan2005

Matze 18. Mär 2005 23:53

Re: In einem String die ersten 4 Zeichen löschen?
 
@Stefan: Habe das so getestet:

Delphi-Quellcode:
var Str: string;
begin
  Str := '123456789';

  asm
    add [Str],4;
  end;

  Caption := Str;
end;
Und das Ergebnis stimmt, dennoch kommt eine Zugriffsverletzung, aber frag mich bitte nicht, wieso. :gruebel:

derpepe 19. Mär 2005 01:19

Re: In einem String die ersten 4 Zeichen löschen?
 
Zitat:

Zitat von alcaeus
Delphi-Quellcode:
Str := Copy(Str, 4, Length(Str)-4);

Ähm, das kopiert doch ab dem 4. Zeichen, oder seh ich das falsch!?

Also z.B.
String vorher: '1234567890'
String nachher: '4567890?'

Da der zweite Parameter den Count angibt, müßte das doch so heißen:
Delphi-Quellcode:
Str := Copy(Str, 5, Length(Str)-4);
Oder wenn Du die letzten 4 Zeichen abschneiden wolltest:
Delphi-Quellcode:
Str := Copy(Str, 1, Length(Str)-4);
Oder lieg ich da jetzt falsch?! Lass mich gerne belehren :P

alcaeus 19. Mär 2005 05:16

Re: In einem String die ersten 4 Zeichen löschen?
 
Hallo derpepe,

klar sollte es 5 heissen, das kommt aber davon wenn man sich zu oft mit PHP und C rumschlaegt :wall:

@Stefan2005, Matze:
ich wage zu bezweifeln dass man das so machen kann. Erstens gehen hier 4 Bytes floeten (sprich sind nicht freigegebener Speicher, aber auch nicht verwendet und ihr habt auch nicht wirklich einen Pointer drauf, denn beim ersten Str:=Str+'1' wird AFAIK neuer Speicher reserviert), und zweitens hat ein der 2 GB-String (also das was man normalerweise in Delphi mit String meint) auch noch einen Referenzzaehler und noch was, und belegt auch die 4 Bytes vor der Adresse des 0. Zeichens. Ihr muesstet also 8 Bytes um 4 Bytes nach rechts kopieren, und dann erst die Adresse um 4 Byte erhoehen. IMHO ist das aber etwas von dem man die Finger lassen soll. Wenns schnell gehn soll (was solche ASM sachen ja sind), kann man sich mal die FastStrings-Unit ansehn.

Greetz
alcaeus

glkgereon 19. Mär 2005 09:24

Re: In einem String die ersten 4 Zeichen löschen?
 
ich hätte es nach wie vor so gemacht:

Delphi-Quellcode:
Delete(Str,1,4);


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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