delete
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
delete
ich versuche, das Komma aus einer Preisangabe zu löschen, wobei ich aber nicht genau weiß, an welcher Stelle sich das Komma befindet. Also der Preis könnte 5,000.00 $ sein oder aber auch 50,000.00 $. Wenn ich schreibe [ code ]
delete(Preis,,,,)
[ /code ]
gibt es eine Fehlermeldung, weil Lazarus erwartet, dass man die Stelle angibt, an der das Komma gelöscht werden soll.
delete(Preis,,,,)
[ /code ]
gibt es eine Fehlermeldung, weil Lazarus erwartet, dass man die Stelle angibt, an der das Komma gelöscht werden soll.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: delete
Code: Alles auswählen
var i : integer;
begin
i := Pos(',', s);
if (i > 0) then
system.delete(s, i, 1);
end;
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: delete
danke, da hätte ich eigentlich auch selber drauf kommen können.
Re: delete
Wenn der Preis aber in deutscher Art angegeben ist, dann kommt es einem *100 gleich.
Also im Fall, dass das Komma an der dritten, rechten Position ist, wäre das besser, dies nicht auszuführen.
Also im Fall, dass das Komma an der dritten, rechten Position ist, wäre das besser, dies nicht auszuführen.
Gruß, Michael
Re: delete
Es könnten ja auch 1,000,000.00 $ sein.
So wären dann gleich alle weg:
https://wiki.freepascal.org/StringReplace/de
So wären dann gleich alle weg:
Code: Alles auswählen
Str:= StringReplace(Str, ',', '', [rfReplaceAll]);
-
- Beiträge: 67
- Registriert: So 17. Okt 2021, 17:18
- OS, Lazarus, FPC: Windows 7
- CPU-Target: X86
- Wohnort: Allgäu
Re: delete
ja, das ist ja noch viel besser. Mit den Preisen von Kryptowährungen umzugehen, ist gar nicht so einfach. Da unterscheiden sich die Angaben von 100 Millionen bis zu einem Millionstel des Reziprokwertes.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: delete
Da das komma ja immer alle 3 stellen (von hinten) kommt, kann man das ganze auch mit ein bisschen Mathe machen:
Wobei SuffixLength die Länge des nicht Ganzzahlteils + alles dahinter ist (also '.00 $' ist es 5 zeichen lang)
PS: Dollar preise werden übringens nicht XXX$ geschrieben wie mit Euro (e.g. 500€) sondern in prefix notation also wäre das dann $500 nicht 500$
Die angepasste funktion dafür ist:
Beispiel:
Code: Alles auswählen
function RemoveCommas(const Price: String; const SuffixLength: SizeInt): String;
var
CommaCount, i, ToFull: SizeInt;
begin
CommaCount := (Price.Length - (SuffixLength + 1)) div 4;
ToFull := 2 - (Price.Length - (SuffixLength + 1)) mod 4;
SetLength(Result, Price.Length - CommaCount);
Move(Price[Price.Length - (SuffixLength - 1)], Result[Result.Length - (SuffixLength - 1)], SuffixLength);
for i:=Price.Length - SuffixLength downto 1 do
begin
Result[i - ((i + ToFull) div 4)] := Price[i];
end;
end;
PS: Dollar preise werden übringens nicht XXX$ geschrieben wie mit Euro (e.g. 500€) sondern in prefix notation also wäre das dann $500 nicht 500$
Die angepasste funktion dafür ist:
Code: Alles auswählen
function RemoveCommas(const Price: String; const PrefixLength, SuffixLength: SizeInt): String;
var
CommaCount, i, ToFull: SizeInt;
begin
CommaCount := (Price.Length - (PrefixLength + SuffixLength + 1)) div 4;
ToFull := 2 - (Price.Length - (PrefixLength + SuffixLength + 1)) mod 4;
SetLength(Result, Price.Length - CommaCount);
Move(Price[Price.Length - (SuffixLength - 1)], Result[Result.Length - (SuffixLength - 1)], SuffixLength);
Move(Price[1], Result[1], PrefixLength);
for i:=Price.Length - SuffixLength downto 1 + PrefixLength do
begin
Result[i - (((i - PrefixLength) + ToFull) div 4)] := Price[i];
end;
end;
Code: Alles auswählen
begin
WriteLn(RemoveCommas('500.00 $', 0, 5));
WriteLn(RemoveCommas('5,000.00 $', 0, 5));
WriteLn(RemoveCommas('50,000.00 $', 0, 5));
WriteLn(RemoveCommas('500,000.00 $', 0, 5));
WriteLn(RemoveCommas('5,000,000.00 $', 0, 5));
WriteLn(RemoveCommas('50,000,000.00 $', 0, 5));
WriteLn(RemoveCommas('500,000,000.00 $', 0, 5));
WriteLn(RemoveCommas('$500.00', 1, 3));
WriteLn(RemoveCommas('$5,000.00', 1, 3));
WriteLn(RemoveCommas('$50,000.00', 1, 3));
WriteLn(RemoveCommas('$500,000.00', 1, 3));
WriteLn(RemoveCommas('$5,000,000.00', 1, 3));
WriteLn(RemoveCommas('$50,000,000.00', 1, 3));
WriteLn(RemoveCommas('$500,000,000.00', 1, 3));
ReadLn;
end.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: delete
Hi!
Ein Tippfehler von der gestressten Datantypistin und das Kartenhaus fällt zusammen.
Winni
Ein Tippfehler von der gestressten Datantypistin und das Kartenhaus fällt zusammen.
Winni