Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringReplace mag nicht? (https://www.delphipraxis.net/28772-stringreplace-mag-nicht.html)

knödel 30. Aug 2004 01:18


StringReplace mag nicht?
 
Ich glaub ich spinne?! :freak:

StringReplace will einfach nicht, dieser Code ist doch korrekt?

Code:
...
var
  blubb : string;
begin
  blubb := 'bla';
  ShowMessage(blubb); // -> gibt 'bla' aus
  StringReplace(blubb,'bla','blubb',[rfReplaceAll]);
  ShowMessage(blubb); // -> gibt 'bla' aus
...
StringReplace ändert hierbei überhaupt nichts! In beiden Meldefenstern wird immer noch 'bla' ausgegeben. :stupid:
Spinnt mein Delphi oder Ich? :roteyes:

StefanDP 30. Aug 2004 01:25

Re: StringReplace mag nicht?
 
Zitat:

Zitat von knödel
Ich glaub ich spinne?! :freak:

StringReplace will einfach nicht, dieser Code ist doch korrekt?

Code:
...
var
  blubb : string;
begin
  blubb := 'bla';
  ShowMessage(blubb); // -> gibt 'bla' aus
  StringReplace(blubb,'bla','blubb',[rfReplaceAll]);
  ShowMessage(blubb); // -> gibt 'bla' aus
...
StringReplace ändert hierbei überhaupt nichts! In beiden Meldefenstern wird immer noch 'bla' ausgegeben. :stupid:
Spinnt mein Delphi oder Ich? :roteyes:

wie wärs mit:
Delphi-Quellcode:
  blubb := StringReplace(blubb,'bla','blubb',[rfReplaceAll]);
stefan

Luckie 30. Aug 2004 01:33

Re: StringReplace mag nicht?
 
ja ja. Mal wieder die Delphi Hilfe:
Zitat:

Returns a string with occurrences of one substring replaced by another substring.
Und man könnte es sogar an der Definition erkennen:
Code:
[color=red][b]function[/b][/color] StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): [b][color=red]string[/color][/b];

knödel 30. Aug 2004 01:49

Re: StringReplace mag nicht?
 
Ein Dankeschön an die Herren! :spin2:

Ich habe die Funktion ja erst durch die Hilfe gefunden, nicht dass ihr denkt, ich guck da nie/nicht nach. Habe mir wohl die Pascal-Syntax noch nicht so richtig angewöhnt. :roll:

Aber Ihr werdet mir doch verzeihen? Denn ich progge erst seit ein paar Wochen Delphi. :zwinker:

[Nachtrag]
Achja, in meiner Hilfe ist das zwar ausführlich beschrieben, aber genau das eine fehlt:
Zitat:

Delphi-Syntax:

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

Beschreibung

Mit StringReplace ersetzen Sie in dem angegebenen String den im Parameter OldPattern festgelegten Sub-String mit dem im Parameter NewPattern übergebenen neuen Sub-String. StringReplace nimmt an, dass der String Multibyte-Zeichen enthalten kann.

S ist der Ausgangs-String, dessen Sub-Strings geändert werden sollen.

OldPattern ist der Sub-String, der gefunden und durch NewPattern ersetzt werden soll.

NewPattern ist der Sub-String, bei dem die Vorkommen von OldPattern ersetzt werden sollen.

Flags ist eine Gruppe von Flags, die steuern, wie StringReplace die Vorkommen von OldPattern sucht und ersetzt. Wenn Flags rfReplaceAll nicht enthält, ersetzt StringReplace nur das erste Vorkommen von OldPattern in S. Andernfalls ersetzt StringReplace alle Instanzen von OldPattern durch NewPattern. Wenn der Parameter Flags rfIgnoreCase enthält, wird die Groß-/Kleinschreibung nicht berücksichtigt.
Kann man doch leicht so missverstehen? :oops:


MfG

Brüggendiek 30. Aug 2004 02:05

Re: StringReplace mag nicht?
 
Hallo knödel!

Das Problem ist, daß Delphi über eine lange Zeit entstanden ist.

Die Prozedur "Delete" war z.B. schon in der CP/M-Version von Turbo-Pascal vorhanden. Sie verändert den übergebenen Parameter.

StringReplace ist viel neuer. Bei der Einführung dieser Routine gab es schon Properties - und die lassen sich aus prinzipiellen Gründen nicht als VAR-Parameter übergeben. Deshalb wurde die Funktion gewählt.
Code:
Delete(Edit1.Text,1,1); //<-- geht nicht
Edit1.Text:=StringReplace(Edit1.Text,',','.'[rfReplaceAll]); //<-- geht
Deshalb werden jetzt VAR-Parameter möglichst vermieden - die alten Sachen werden aber nicht verändert.

Gruß

Dietmar Brüggendiek

himitsu 30. Aug 2004 03:01

Re: StringReplace mag nicht?
 
Keine Sorge ... ich hatte auch mal das selbe Problem und dachte auch schon ich werd' irre...


Allerdings steht bei mir auchnoch folgendes ganz oben in der Hilfe, was eigentlich die Lösung enthält.
Die Funktion gibt einen String mit ersetzten Sub-Strings zurück.
Obwohl es so "Die Funktion gibt den String, mit den ersetzten Sub-Strings, als Ergebnis zurück." wohl etwas verständlicher wäre.


[etwas OT]
Tja, manchmal ist es schon gemein, wenn Delphi (oder auch anderes) nicht mekert, wenn man mal ein Funktionsergebnis in's leere laufen läßt :?


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