AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Schnellstes Entfernen von Chars aus einem String?

Schnellstes Entfernen von Chars aus einem String?

Ein Thema von PeterPanino · begonnen am 29. Mär 2015 · letzter Beitrag vom 14. Apr 2015
Antwort Antwort
Seite 1 von 7  1 23     Letzte » 
PeterPanino

Registriert seit: 4. Sep 2004
1.442 Beiträge
 
Delphi 10.4 Sydney
 
#1

Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:19
Hallo! Was ist die SCHNELLSTE Methode, um aus einem String alle Zeichen eines anderen Strings zu entfernen? Also z.B.:

function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:26
Ich habe keinen Vergleich, aber ich würde mal Testen, ob StringReplace() schnell genug ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:36
StringReplace wurde immer ein Zeichen ersetzen. Man müsste es somit für jeden Zeichen wiederholen (was auch keine Arbeit wäre).

Ansonsten aus dem Kopf:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var
  i: Integer;
begin
  Result := AStr;
  for i := Length(Result) downto 0 do
    if Pos(Result[i], CharsToRemove) > 0 then
    //if Pos(AnsiUpperCase(Result[i]), AnsiUpperCase(CharsToRemove)) > 0 then
      Delete(Result, i, 1);
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:42
Nein, man kann der Funktion auch Sagen, dass sie alle Vorkommnisse erseten soll.
(rfReplaceAll in Flags)
Markus Kinzler
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:44
StringReplace wurde immer ein Zeichen ersetzen. Man müsste es somit für jeden Zeichen wiederholen (was auch keine Arbeit wäre).

Ansonsten aus dem Kopf:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var
  i: Integer;
begin
  Result := AStr;
  for i := Length(Result) downto 0 do
    if Pos(Result[i], CharsToRemove) > 0 then
    //if Pos(AnsiUpperCase(Result[i]), AnsiUpperCase(CharsToRemove)) > 0 then
      Delete(Result, i, 1);
end;
Müsste man mal testen, was schneller wäre...auch aus dem Kopf und ungetestet:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var
  i,p: integer;
  ch: char;
begin
  Result := AStr;
  for i := 1 to Length(CharsToRemove) do begin
    p := Pos(CharsToRemove[i],Result);
    if p > 0 then
    repeat
      Delete(Result,p,1);
      p := Pos(CharsToRemove[i],Result);
    until P = 0;
  end;
end;
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:53
Nein, man kann der Funktion auch Sagen, dass sie alle Vorkommnisse erseten soll.
(rfReplaceAll in Flags)
Ja, alle Vorkommen des Such-Strings. Der Threadersteller will aber glaube ich jedes Zeichen im CharToRemove String entfernen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:55
So wie ich den TE verstanden habe hat er z. B. den Text "Hallo große Welt!" und möchte nun alle l und e entfernen, so das "Hao groß Wt!" rauskommt. Ich mag mich irren, denn ich hab StringReplace schon lange nicht genutzt. Also mit rfReplaceAll werden alle l in einem Vorgang entfert, aber nicht auch e. Für e müsste man einen zweiten Durchlauf machen. In etwa so:

Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var
  i: Integer;
begin
  Result := AStr;
  for i := 1 to Length(CharsToRemove) do
    Result := StringReplace(Result, CharsToRemove[i], '', [rfReplaceAll, rfIgnoreCase]);
end;
(dieses Mal nicht aus dem Kopf )
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:58
Wenn man einen höheren IQ als ich hat, könnte man das aus der Frage herauslesen, aber "einfach gestrickte Typen" wie ich, haben den feinen Kniff glatt überlesen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 17:12
Erster Versuch, der DEUTLICH schneller ist, als alle anderen bisher geposteten Lösungen:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr: String; CharsToRemove: TSysCharSet): string;
var
  I, J: Integer;
begin
  SetLength(Result, Length(AStr));
  J := 1;
  for I := 1 to Length(AStr) do
  begin
    if (not (AStr[I] in CharsToRemove)) then
    begin
      Result[J] := AStr[I];
      J := J + 1;
    end;
  end;
  SetLength(Result, J - 1);
end;
Getestet mit einem 256KiB großen Zufallsstring (bestehend aus 'a'..'z') und CharsToRemove mit 'a' und 'z':
Code:
mm1256  :  656ms
Popov   : 1359ms
Zacherl1:    0ms
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (29. Mär 2015 um 17:56 Uhr)
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 17:20
Warum so kompliziert, einfach mal die Beschreibung von SysUtils.StringReplace lesen

So wie ich das verstehe, ersetzt diese einen Teilstring durch einen neuen, nicht einzelne Zeichen.

Also braucht man nur diese aufrufen mit RepaceAll und fertig. Wenn der Strig nicht Megabites gross ist sehe ich auch keine Notwendigkeit, über die Geschwindigkeit nachzudenken.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:00 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