Delphi-PRAXiS

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

Hansa 23. Feb 2014 13:43

Delphi-Version: 5

StringReplace geht nicht
 
Moin,

kann mir mal einer sagen, was hier falsch ist?

Delphi-Quellcode:
sl.LoadFromFile ('TEST');
StringReplace (sl.Text,'5','',[rfReplaceAll]);
ShowMessage(sl.text);
An dem sl.Text ändert sich absolut nichts. Die 5 ist nach wie vor da drin.

silver-moon-2000 23. Feb 2014 13:46

AW: StringReplace geht nicht
 
Zitat:

Zitat von Hansa (Beitrag 1249204)
Moin,

kann mir mal einer sagen, was hier falsch ist?

Delphi-Quellcode:
sl.LoadFromFile ('TEST');
StringReplace (sl.Text,'5','',[rfReplaceAll]);
ShowMessage(sl.text);
An dem sl.Text ändert sich absolut nichts. Die 5 ist nach wie vor da drin.

Probier's mal so:
Delphi-Quellcode:
SL.Text := StringReplace (sl.Text,'5','',[rfReplaceAll]);

Perlsau 23. Feb 2014 15:36

AW: StringReplace geht nicht
 
StringReplace ist eine Function und liefert den geänderten String in Result zurück.

DeddyH 23. Feb 2014 16:38

AW: StringReplace geht nicht
 
Mal ganz ehrlich: nach 12 Jahren Forenzugehörigkeit sollte man die F1-Taste aber bedienen können.

Hansa 23. Feb 2014 16:53

AW: StringReplace geht nicht
 
Thx,

tja das kommt davon.
Delphi-Quellcode:
StrToFloat (StringReplace(...
Wenn man sich da nur das StrReplace rauszieht, ohne drüber nachzudenken, was der Rest wohl zu bedeuten hat. :duck:

Wie heisst noch der Compiler-Schalter, um solches Verhalten abzustellen ? :gruebel: Dchlimmer ist allerings, dasss mich das StringReplace sowieso nichts nützt. Es müssen ca. 20 verschiedene Zeichen entfrernt werden, nicht nur eins. Gibts noch was in der Richtung oder muss ich das Zeichen für Zeichen durchgehen ?

sx2008 23. Feb 2014 16:54

AW: StringReplace geht nicht
 
Ich wünsche mir ja schon seit langem ein Schlüsselwort in Delphi mit dem man signalisieren kann dass das Ergebnis einer Funktion zwingend entgegengenommen werden muss.
Delphi-Quellcode:
function StringReplace(const S, OldStr, NewStr: string; Flags: TReplaceFlags): string;pure;
// "pure" bedeutet die Funktion ist frei von Nebeneffekten
// deshalb würde der Aufruf der Funktion wie eine Prozedur als Fehler betrachtet

Union 23. Feb 2014 17:00

AW: StringReplace geht nicht
 
Und ich wünsche mir einen Compilerschalter, der konstante Parameter verbietet oder bei der Verwendung warnt:

Delphi-Quellcode:
GenerateComplicatedOutput('Test.txt', 1, 7.35, 'No') // Sollte nicht zulässig sein
GenerateComplicatedOutput(LFileName, LPageNumber, LFactor, C_NO) // So ist es fein

Hansa 23. Feb 2014 17:12

AW: StringReplace geht nicht
 
Um das Prozedur-/Funtionsverhalten zu beeinflussen, das wäre jedenfalls {$X-}, standardmässig ist das offensichtlich {$X+}

Union 23. Feb 2014 17:21

AW: StringReplace geht nicht
 
Zitat:

Zitat von Hansa (Beitrag 1249220)
Um das Prozedur-/Funtionsverhalten zu beeinflussen, das wäre jedenfalls {$X-}, standardmässig ist das offensichtlich {$X+}

Und schon wird fast Dein gesamter Code nicht mehr compiliert weil Du auch kein result mehr hast.
Delphi-Quellcode:
// Geht nicht
function IstUngleichNull(AInteger : integer) : boolean;
begin
  result := AInteger <> 0;
end;

// Muss dann so sein
function IstUngleichNull(AInteger : integer) : boolean;
begin
  IstUngleichNull := AInteger <> 0;
end;

Hansa 23. Feb 2014 17:42

AW: StringReplace geht nicht
 
Zitat:

Zitat von Union (Beitrag 1249222)
..wird fast Dein gesamter Code nicht mehr compiliert...

Und ob der compiliert wird. Das wäre zwar strenger, aber mehr Arbeit ist das kaum. Der dämliche Fehler hier, den hätte ich mir jedenfalls erspart. 8-)

Insider2004 24. Feb 2014 06:51

AW: StringReplace geht nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1249214)
Mal ganz ehrlich: nach 12 Jahren Forenzugehörigkeit sollte man die F1-Taste aber bedienen können.

Die funktioniert aber nur bei Delphi 7. :stupid:

Buddelfish 24. Feb 2014 06:56

AW: StringReplace geht nicht
 
Zitat:

Zitat von Hansa (Beitrag 1249216)
Es müssen ca. 20 verschiedene Zeichen entfrernt werden, nicht nur eins. Gibts noch was in der Richtung oder muss ich das Zeichen für Zeichen durchgehen ?

Wenn es einzelne Zeichen sind, sollte eine kleine Schleife das Schnellste sein.
Zitat:

Zitat von Union (Beitrag 1249219)
Und ich wünsche mir einen Compilerschalter, der konstante Parameter verbietet oder bei der Verwendung warnt:

Zitat:

Zitat von sx2008 (Beitrag 1249217)
Ich wünsche mir ja schon seit langem ein Schlüsselwort in Delphi mit dem man signalisieren kann dass das Ergebnis einer Funktion zwingend entgegengenommen werden muss.

Oh je. Noch mehr Komplexität in der Sprache. Wieso wünscht man sich nicht einfach Programmierer, die wissen, was sie tun?* (*: Es gibt übrigens keinen Compilerschalter gegen 'Brett vor dem Kopf'. Passiert jedem und gehört dazu.)

mkinzler 24. Feb 2014 07:01

AW: StringReplace geht nicht
 
Zitat:

Zitat von Insider2004 (Beitrag 1249253)
Zitat:

Zitat von DeddyH (Beitrag 1249214)
Mal ganz ehrlich: nach 12 Jahren Forenzugehörigkeit sollte man die F1-Taste aber bedienen können.

Die funktioniert aber nur bei Delphi 7. :stupid:

Komischerweise hat die bei mir bei allen Delphiversionen funktioniert

Buddelfish 24. Feb 2014 07:02

AW: StringReplace geht nicht
 
Zitat:

Zitat von mkinzler (Beitrag 1249255)
Komischerweise hat die bei mir bei allen Delphiversionen funktioniert

Auf den Inhalt kommt es an ;-)

Sir Rufo 24. Feb 2014 07:18

AW: StringReplace geht nicht
 
Zitat:

Zitat von Buddelfish (Beitrag 1249256)
Zitat:

Zitat von mkinzler (Beitrag 1249255)
Komischerweise hat die bei mir bei allen Delphiversionen funktioniert

Auf den Inhalt kommt es an ;-)

Und? Ich bekomme direkt im IDE-Editor die Info angezeigt, dass es sich um eine Funktion handelt und was für ein Typ der Rückgabewert ist. Diese Information hätte in diesem Fall doch schon gereicht.

Zudem kann man mit einem Klick zur Implementierung springen und sieht direkt den Source.

Bevor ich die Hilfe aufrufe nutze ich diese Quellen.

Manchmal muss man nur die Augen offen haben.

Buddelfish 24. Feb 2014 07:26

AW: StringReplace geht nicht
 
Zitat:

Zitat von Sir Rufo (Beitrag 1249258)
Manchmal muss man nur die Augen offen haben.

Und wenn das Brett direkt davor steht? Sei froh, das Du immer alles richtig machst, nie ein Brett vor dem Kopf hast und sogar einen Mustopfdetektor besitzt.

Bernhard Geyer 24. Feb 2014 07:33

AW: StringReplace geht nicht
 
Zitat:

Zitat von Buddelfish (Beitrag 1249259)
Zitat:

Zitat von Sir Rufo (Beitrag 1249258)
Manchmal muss man nur die Augen offen haben.

Und wenn das Brett direkt davor steht? Sei froh, das Du immer alles richtig machst, nie ein Brett vor dem Kopf hast und sogar einen Mustopfdetektor besitzt.

In diesem Fall waren es zwei Bretter. Denn bei einem var-parameter gäbe es ein Compilerwarnung da der Übergebene sl.Text nicht als var-Parameter funktionieren kann.

DeddyH 24. Feb 2014 07:48

AW: StringReplace geht nicht
 
Dafür müsste man aber dann eine Dummy-Variable deklarieren, die man eigentlich gar nicht benötigt.

Sir Rufo 24. Feb 2014 07:57

AW: StringReplace geht nicht
 
Zitat:

Zitat von Buddelfish (Beitrag 1249259)
Zitat:

Zitat von Sir Rufo (Beitrag 1249258)
Manchmal muss man nur die Augen offen haben.

Und wenn das Brett direkt davor steht? Sei froh, das Du immer alles richtig machst, nie ein Brett vor dem Kopf hast und sogar einen Mustopfdetektor besitzt.

Entschuldigung, dass ich diesen "Maus über Wort halten", "Strg-Click auf Wort" und "Shift-Strg-Leer in Parameterliste" Reflex habe. Ich bin halt faul und merke mir nur, wie ich schnell an die Informationen kommen kann.

Vielleicht gibt es ja so einen Hilfskreis "Anonyme IDE-Tools Nutzer" oder auch "Anonyme Dokumentations Nutzer", da könnte ich mich ja mal anmelden. Ist ja nicht mehr auszuhalten.

:mrgreen:

DeddyH 24. Feb 2014 08:04

AW: StringReplace geht nicht
 
Zur Not kannst Du immer noch eine Selbsthilfegruppe gründen :lol:

michaelthuma 24. Feb 2014 09:48

AW: StringReplace geht nicht
 
So wird gschodert. Hilfe nicht installieren. Die Wahl hat man jetzt nicht mehr. Egal. Caps Lock Key rausbrechen, F1 rausbrechen und ggf. abkleben. Hilft ungemein.

Zitat:

Zitat von Sir Rufo (Beitrag 1249262)
Vielleicht gibt es ja so einen Hilfskreis "Anonyme IDE-Tools Nutzer" oder auch "Anonyme Dokumentations Nutzer", da könnte ich mich ja mal anmelden. Ist ja nicht mehr auszuhalten.
:mrgreen:


Union 24. Feb 2014 11:38

AW: StringReplace geht nicht
 
Zitat:

Zitat von michaelthuma (Beitrag 1249266)
So wird gschodert.

Bitte um Code auch Code-Tags machen :-D

himitsu 24. Feb 2014 13:04

AW: StringReplace geht nicht
 
Zitat:

Zitat von sx2008 (Beitrag 1249217)
Ich wünsche mir ja schon seit langem ein Schlüsselwort in Delphi mit dem man signalisieren kann dass das Ergebnis einer Funktion zwingend entgegengenommen werden muss.

Mir ist so, als wenn es das schon sehr, sehr lange gibt. Nur ist es seit lamgem Standardmäßig ausgeschaltet, aber niemand hindert dich daran es wieder anzuschalten.

Bissl falsch verstanden ... es gibt einen Kompilerschalter, vomit man abschalten konnte, daß Rückgabewerte ausgewertet (irgendwo zugewiesen) werden müssen.


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