Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   StringReplace: Fehlender Parameter? (https://www.delphipraxis.net/157569-stringreplace-fehlender-parameter.html)

SvenLittkowski 17. Jan 2011 00:24

StringReplace: Fehlender Parameter?
 
Hi erneut!

Ich wollte in meiner Unwissenheit die Funktion StringReplace einsetzen, um die durch die Funktion STR verursachten Leerzeichen am Anfang eines Strings zu entfernen. Bei PHO gibt es ja schöne Funktionen wie TRIM, aber bei meinem Delphi 7 gibt es dies offenbar leider nicht.

Hier erstmal der gegenwärtige Code:

Code:
 Rounded:=StrToFloat(EditFrom.Text)*(ValueFrom/ValueTo);
 Str(Rounded:1000:Floater,Results);
 Calculate:=StringReplace(Results,' ','');
ValueFrom, ValueTo und Rounded sind vom Typ REAL.
Results und Calculate sind vom Type String.
Floater ist vom Typ Integer.

Ich verwende STR, um durch den Benutzer entscheiden zu lassen, wieviele Stellen hinter dem Komma angezeigt werden sollen (Floater). Jedoch scheint es keine Möglichkeit zu geben, den Parameter für die Stellen vor dem Komma nicht zu gebrauchen und nur den Parameter für die Nachkommastellen, oder?
Ich würde sehr gerne die Stellen vor dem Komma so viele sein lassen, wie die Zahl eben benötigt. Da ich dies anscheinend nicht kann, habe ich die Vorkommastellen großzügig mit 1000 gesetzt.

Das verursacht aber leider viele Leerzeichen, wenn die Zahl halt nicht so viele Stellen hat. Deswegen muß ich dann auch StringReplace einsetzen, um die ganzen Leerzeichen wieder zu entfernen. Aber es wird ein weiterer Parameter erwartet, hier ist die entsprechende Fehlermeldung:

Zitat:

Zitat von Delphi 7
Not enough actual parameters

Fragen:
- Wie komplettiere ich den Aufruf der Funktion StringReplace?
- Kann ich bei STR die Nachkommastellen setzen, doch die Vorkommastelen nur so viele seinlassen wie benötigt werden von der Zahl? Wie?

SvenLittkowski 17. Jan 2011 00:32

AW: StringReplace: Fehlender Parameter?
 
Lösung selbst gefunden:

",[rfReplaceAll]" als letzten Parameter benutzen, ist nicht optional sondern MUSS benutzt werden. Aber meine Frage in Bezug auf STR bleibt.

marabu 17. Jan 2011 05:43

AW: StringReplace: Fehlender Parameter?
 
Hallo Sven,

bei der Ur-Pascal-Prozedur Str() gibst Du mit Width die minimale Anzahl an Zeichen im Ergebnis an. Leerstellen werden zum Auffüllen verwendet, aber eine Verkürzung findet nicht statt. Width = 0 erfüllt also deine Anforderung perfekt.

Grüße vom marabu

himitsu 17. Jan 2011 07:38

AW: StringReplace: Fehlender Parameter?
 
Man könnte natürlich statt dem uralten Delphi-Referenz durchsuchenStr auch einfach das neuere Delphi-Referenz durchsuchenFormat nutzen.
Dort kann man die entsprechenden Werte der Formatparameter durch ein * ersetzen und dieses dann als Parameter mit übergeben.

Delphi-Quellcode:
Results := Format('%.*n', [Floater, StrToFloat(EditFrom.Text) * (ValueFrom / ValueTo)]);

///////////////////////////////////////////////////////

Rounded := StrToFloat(EditFrom.Text) * (ValueFrom / ValueTo);
Results := Format('%.*n', [Floater, Rounded]);

Rounded := StrToFloat(EditFrom.Text) * (ValueFrom / ValueTo);
Str(Rounded::Floater, Results);

///////////////////////////////////////////////////////

Rounded := StrToFloat(EditFrom.Text) * (ValueFrom / ValueTo);
Results := Format('%*.*n', [0, Floater, Rounded]);

Rounded := StrToFloat(EditFrom.Text) * (ValueFrom / ValueTo);
Str(Rounded:0:Floater, Results);

Sherlock 17. Jan 2011 08:30

AW: StringReplace: Fehlender Parameter?
 
Davon abgesehen gibt es Delphi-Referenz durchsuchentrim auch schon in Delphi 7. Man muss halt die SysUtils einbinden.

Sherlock

SvenLittkowski 19. Jan 2011 06:19

AW: StringReplace: Fehlender Parameter?
 
Vielen Dank an alle! Ein guter Teamgeist hier im Forum.


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