Tausender-Punkt einfügen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Tausender-Punkt einfügen

Post by gero » 16 Jun 2020, 04:00

Hallo zusammen
Ich denke mal, dass es eleganter (einfacher) gehen müsste einen Tausender-Punkt in einen String zu bekommen, als mein Code das macht ... irgendwie mit "Format" - finde aber nichts entsprechendes.
Etwas Hilfe wäre sehr willkommen ;)

gruss
gero

Code: Select all

String:=100000
StringRight,x,String,3
StringTrimRight,String,String,3
String:= String . "." . x

MsgBox,4096,Info,% String


gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Tausender-Punkt einfügen

Post by gero » 16 Jun 2020, 05:43

@ just me... ja danke ... aber so gesehen ist mein einfacher "Standard-Code-3-zeiler" schon recht schlank - gelle

gruss
gero

nacken012
Posts: 90
Joined: 22 Jul 2016, 14:39

Re: Tausender-Punkt einfügen

Post by nacken012 » 16 Jun 2020, 08:14

Code: Select all

String:=1000000

while (oldText != (String := RegExReplace(String, "(\d)(\d\d\d(?:\D|$))", "$1.$2")))
	oldText := String
MsgBox, %String%

User avatar
Ragnar
Posts: 613
Joined: 30 Sep 2013, 15:25

Re: Tausender-Punkt einfügen

Post by Ragnar » 16 Jun 2020, 09:24

Code: Select all

Zahl := 100000
Gui, Add, Edit, vE
Gui, Add, UpDown, Range-2147483648-2147483647, % Zahl
GuiControlGet, KonvertierteZahl,, E
MsgBox % KonvertierteZahl

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Tausender-Punkt einfügen

Post by BoBo » 16 Jun 2020, 10:10

@Ragnar :clap: Interessante 'built-in'-option! Gehe ich recht in der Annahme, das der 'thousand separator' nach den local system settings ausgeführt wird? Hier als Punkt, auf einer Amerikanischen Dose jedoch als Komma?? :think:

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Tausender-Punkt einfügen

Post by gero » 16 Jun 2020, 11:05

Also ich bin ja nur so ein Gelegenheits-geradeaus-Coder ...aber in einem Loop über ca. 10.000 Zeilen alle paar Sekunden, scheint mir mein Code doch der einfachste und schnellste zu sein ... oder irrt Gero hier ?

gruss
gero

User avatar
Ragnar
Posts: 613
Joined: 30 Sep 2013, 15:25

Re: Tausender-Punkt einfügen

Post by Ragnar » 16 Jun 2020, 11:07

BoBo wrote:
16 Jun 2020, 10:10
@Ragnar :clap: Interessante 'built-in'-option! Gehe ich recht in der Annahme, das der 'thousand separator' nach den local system settings ausgeführt wird? Hier als Punkt, auf einer Amerikanischen Dose jedoch als Komma?? :think:
Deine Annahme ist korrekt ;)

just me
Posts: 9449
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Tausender-Punkt einfügen  Topic is solved

Post by just me » 17 Jun 2020, 03:23

gero wrote:
16 Jun 2020, 11:05
Also ich bin ja nur so ein Gelegenheits-geradeaus-Coder ...aber in einem Loop über ca. 10.000 Zeilen alle paar Sekunden, scheint mir mein Code doch der einfachste und schnellste zu sein ... oder irrt Gero hier ?

gruss
gero
Vielleicht?

Code: Select all

#NoEnv
Zahlen := [1, 12, 123, 1234, 12345, 123456, 1234567]
For I, Zahl In Zahlen
   MsgBox, 0, Info, % Zahl . " => " . TausenderPunkt(Zahl)
ExitApp

TausenderPunkt(Zahl) {
   StringRight,x,Zahl,3
   StringTrimRight,Zahl,Zahl,3
   Zahl:= Zahl . "." . x
   Return Zahl
}

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Tausender-Punkt einfügen

Post by gero » 17 Jun 2020, 04:13

@ just me
... gefällt mir ... in eine Funktion packen ... das nehm ich ... :D

Meinen herzlichen Dank für deine Hilfe
gruss
gero

just me
Posts: 9449
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Tausender-Punkt einfügen

Post by just me » 17 Jun 2020, 05:28

@gero, ich wollte eigentlich auf ein Problem mit weniger als 4- und mehr als 6-stelligen Zahlen hinweisen. ;)

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Tausender-Punkt einfügen

Post by gero » 17 Jun 2020, 06:15

Ja gut ... solche Zahlen sind hier (in meinem Fall) nicht zu erwarten ... eine Prüfung mit StrLen() könnte ja problemlos eingebaut werden und die Funktion quasi "universell" machen ... denk ich ... oder spricht da was dagegen (Performance) ?

gruss
gero

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Tausender-Punkt einfügen

Post by BoBo » 18 Jun 2020, 15:19

eine Prüfung mit StrLen() könnte ja problemlos eingebaut werden und die Funktion quasi "universell" machen ... denk ich ... oder spricht da was dagegen (Performance) ?
Gibts da nicht gerade was in "Skripte und Funktionen"?? :mrgreen:

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Tausender-Punkt einfügen

Post by gero » 20 Jun 2020, 09:16

@BoBo ...hab ich gesehen ... übersteigt mein Verständnis / meine Fähigkeiten ... :D
Ich verwende halt nur Code, den ich auch verstehe. Ich habs für mich so gelöst: ( 0 -> 100.000.000.000) ... und da es eine Kurzschluss-Operation ist, wird der ganze Schwanz im Normalfall eh nie ausgewertet.

Code: Select all

#singleinstance force
ZAHL=1
Loop,12{
MsgBox,4096,Info,% A_Index . ")   " . tsP(ZAHL)
ZAHL*=10
}
exitapp

tsP(ZAHL) {
StringSplit,u,ZAHL
IF (u0 > 3)   
DUMMI:= (u0=4) ? (ZAHL := u1 "." u2 u3 u4 ) : (u0=5)?(ZAHL := u1 u2 "." u3  u4 u5) : (u0=6) ? (ZAHL := u1 u2 u3 "." u4 u5 u6) : (u0=7)? (ZAHL := u1 "." u2 u3 u4 "."  u5 u6 u7) : (u0=8) ? (ZAHL := u1 u2  "." u3 u4 u5  "." u6 u7 u8) : (u0=9) ? (ZAHL := u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9) : (u0=10) ? (ZAHL := u1 "." u2 u3 u4 "." u5 u6 u7 "." u8 u9 u10) : (u0=11) ? (ZAHL := u1 u2 "." u3 u4 u5 "." u6 u7 u8 "." u9 u10 u11) : (ZAHL:= u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9  "." u10 u11 u12)
return ZAHL
}


effel
Posts: 544
Joined: 16 Jan 2018, 13:34

Re: Tausender-Punkt einfügen

Post by effel » 20 Jun 2020, 15:39

edit: ich ziehe die frage zurück, bei einer Millionen habe ich zwei stellen hinter dem komma
---------------------------
Tausender-Punkt einfügen.ahk
---------------------------
1.234.567.,23
---------------------------
OK
---------------------------

kann man auch mehr als eine Ziffer hinter dem Komma coden?
mein Ergebnis ist 123.456.789.8,2

Code: Select all

;ZAHL = 1234567898`,2345
ZAHL = 1234567898,2345
MsgBox % tsP(ZAHL)

exitapp

tsP(ZAHL) {
StringSplit,u,ZAHL
IF (u0 > 3)   
DUMMI:= (u0=4) ? (ZAHL := u1 "." u2 u3 u4 ) : (u0=5)?(ZAHL := u1 u2 "." u3  u4 u5) : (u0=6) ? (ZAHL := u1 u2 u3 "." u4 u5 u6) : (u0=7)? (ZAHL := u1 "." u2 u3 u4 "."  u5 u6 u7) : (u0=8) ? (ZAHL := u1 u2  "." u3 u4 u5  "." u6 u7 u8) : (u0=9) ? (ZAHL := u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9) : (u0=10) ? (ZAHL := u1 "." u2 u3 u4 "." u5 u6 u7 "." u8 u9 u10) : (u0=11) ? (ZAHL := u1 u2 "." u3 u4 u5 "." u6 u7 u8 "." u9 u10 u11) : (ZAHL:= u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9  "." u10 u11 u12)
return ZAHL
}
/*
---------------------------
Tausender-Punkt einfügen.ahk
---------------------------
123.456.789.8,2
---------------------------
OK   
---------------------------
*/

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Tausender-Punkt einfügen

Post by gero » 20 Jun 2020, 17:02

Kommastellen waren überhaupt nicht vorgesehen,ebenso negative Werte, weil ich sie hier nicht brauche ... aber so sollte das bei Werten > 0 funktionieren:

Code: Select all

wert=1,33333333333
MsgBox,4096,Info,% tsp(wert)
exitapp

tsP(ZAHL) {
StringSplit,a,ZAHL,`,
IF (a0 > 1)
    IF (StrLen(a1) > 3)
        nks := "," a2
        else
        nks := ""
StringSplit,u,a1
IF (u0 > 3)   
DUMMI:= (u0=4) ? (ZAHL := u1 "." u2 u3 u4 ) : (u0=5)?(ZAHL := u1 u2 "." u3  u4 u5) : (u0=6) ? (ZAHL := u1 u2 u3 "." u4 u5 u6) : (u0=7)? (ZAHL := u1 "." u2 u3 u4 "."  u5 u6 u7) : (u0=8) ? (ZAHL := u1 u2  "." u3 u4 u5  "." u6 u7 u8) : (u0=9) ? (ZAHL := u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9) : (u0=10) ? (ZAHL := u1 "." u2 u3 u4 "." u5 u6 u7 "." u8 u9 u10) : (u0=11) ? (ZAHL := u1 u2 "." u3 u4 u5 "." u6 u7 u8 "." u9 u10 u11) : (ZAHL:= u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9  "." u10 u11 u12)
return ZAHL nks
}

effel
Posts: 544
Joined: 16 Jan 2018, 13:34

Re: Tausender-Punkt einfügen

Post by effel » 20 Jun 2020, 17:37

das ist besser bei der Vorversion war auch noch ein störender Punkt vor dem Komma

Code: Select all

1.234.567.,23
ich habe mich noch etwas damit beschäftigt, als Übung. brauche den Code aktuell gar nicht, aber so begreife ich es oft besser :-)
ich wollte den punkt vor dem komma weg coden.

das funktioniert auch wie es soll

Code: Select all

ZAHL = 1234567,23
ZAHL := tsP(ZAHL)
msgbox % zahl ; 1.234.567.,23

ZAHLVORHER := SubStr(ZAHL, -6)
ZAHLnachher1 := StrReplace(ZAHLVORHER, ".", "")
msgbox % "ZAHLnachher1 [567,23]`n" ZAHLnachher1 ; 567,23

ZAHLnachher := StrReplace(ZAHL, SubStr(ZAHL, -6), "")
msgbox % "ZAHLnachher [1.234.]`n" ZAHLnachher ; 1.234.

msgbox % ZAHLnachher ZAHLnachher1 ; 1.234.567,23

exitapp

tsP(ZAHL) {
StringSplit,u,ZAHL
IF (u0 > 3)   
DUMMI:= (u0=4) ? (ZAHL := u1 "." u2 u3 u4 ) : (u0=5)?(ZAHL := u1 u2 "." u3  u4 u5) : (u0=6) ? (ZAHL := u1 u2 u3 "." u4 u5 u6) : (u0=7)? (ZAHL := u1 "." u2 u3 u4 "."  u5 u6 u7) : (u0=8) ? (ZAHL := u1 u2  "." u3 u4 u5  "." u6 u7 u8) : (u0=9) ? (ZAHL := u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9) : (u0=10) ? (ZAHL := u1 "." u2 u3 u4 "." u5 u6 u7 "." u8 u9 u10) : (u0=11) ? (ZAHL := u1 u2 "." u3 u4 u5 "." u6 u7 u8 "." u9 u10 u11) : (ZAHL:= u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9  "." u10 u11 u12)
return ZAHL
}
jetzt war ich dabei den code zu verschachteln, das klappt nicht so dolle

effel
Posts: 544
Joined: 16 Jan 2018, 13:34

Re: Tausender-Punkt einfügen

Post by effel » 20 Jun 2020, 18:22

Code: Select all

Var = 1234567,23

newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -6), "") StrReplace(SubStr((tsP(Var)), -6), ".", "")
MsgBox % newVar 
exitapp

tsP(ZAHL) {
StringSplit,u,ZAHL
IF (u0 > 3)   
DUMMI:= (u0=4) ? (ZAHL := u1 "." u2 u3 u4 ) : (u0=5)?(ZAHL := u1 u2 "." u3  u4 u5) : (u0=6) ? (ZAHL := u1 u2 u3 "." u4 u5 u6) : (u0=7)? (ZAHL := u1 "." u2 u3 u4 "."  u5 u6 u7) : (u0=8) ? (ZAHL := u1 u2  "." u3 u4 u5  "." u6 u7 u8) : (u0=9) ? (ZAHL := u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9) : (u0=10) ? (ZAHL := u1 "." u2 u3 u4 "." u5 u6 u7 "." u8 u9 u10) : (u0=11) ? (ZAHL := u1 u2 "." u3 u4 u5 "." u6 u7 u8 "." u9 u10 u11) : (ZAHL:= u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9  "." u10 u11 u12)
return ZAHL
}

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Tausender-Punkt einfügen

Post by BoBo » 21 Jun 2020, 03:09

@gero/@effel Respekt sich dran festzubeissen. Jetzt gibts dazu zwei (bzw mehrere) Vorgehensweisen.
a) du schaust dir den funktionierenden code von anderen an, um final zu verinnerlichen warum der jetzt genau funktioniert ODER ...
b) du frikelst ewig am workaround herum (Methode: "Aus Schaden wird man/frau klug") und hast im Erfolgsfall dann 'lediglich' doch wieder einen workaround - mit dem side-effect das du dabei in der Mehrzahl üben wirst wie es nicht funktioniert.

Noch deutlicher als beim Coden wird dies z.B. beim Musikinstrument lernen.
Orientiert man/frau sich da in der Regel am (Lieblings)Star, oder am Mitschüler, der mitunter schlechter spielt als man/frau selbst?

Da fällt mir gerade ein ... RegEx. Glashaus. Steine. :lol: :shh: :silent:
Happy scripting,
BoBo 8-)

PS. Ein guter Maßstab für 'advanced' Code ist dessen Umfang. Weniger ist da oft mehr, Negligé-Prinzip :mrgreen:
Kriterium für das professionelle Umfeld: maintenance.

Gutes (aktuelles) Beispiel (im selben Thread) ...
:arrow: boiler
:arrow: flyingDman
:arrow: Rohwedder

effel
Posts: 544
Joined: 16 Jan 2018, 13:34

Re: Tausender-Punkt einfügen

Post by effel » 21 Jun 2020, 05:11

Respekt verdiene ich aber nur fürs festbeissen :shock:

leider muss ich auch den letzten Post zurückziehen

bei Milliarden Werten versagt er total

die Stellen hinter dem Komma werden abgeschnitten

auch ein durch-iterieren der gedachten Möglichkeiten bringt keinen Erfolg.

Code: Select all

Var = 11222333444,11
newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -6), "") StrReplace(SubStr((tsP(Var)), -6), ".", "")
VarAll .= newVar "`n"

newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -5), "") StrReplace(SubStr((tsP(Var)), -5), ".", "")
VarAll .= newVar "`n"

newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -4), "") StrReplace(SubStr((tsP(Var)), -4), ".", "")
VarAll .= newVar "`n"

newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -3), "") StrReplace(SubStr((tsP(Var)), -3), ".", "")
VarAll .= newVar "`n"

newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -2), "") StrReplace(SubStr((tsP(Var)), -2), ".", "")
VarAll .= newVar "`n"

newVar := StrReplace( tsP(Var), SubStr((tsP(Var)), -1), "") StrReplace(SubStr((tsP(Var)), -1), ".", "")
VarAll .= newVar "`n"

MsgBox % VarAll

exitapp

tsP(ZAHL) {
StringSplit,u,ZAHL
IF (u0 > 3)   
DUMMI:= (u0=4) ? (ZAHL := u1 "." u2 u3 u4 ) : (u0=5)?(ZAHL := u1 u2 "." u3  u4 u5) : (u0=6) ? (ZAHL := u1 u2 u3 "." u4 u5 u6) : (u0=7)? (ZAHL := u1 "." u2 u3 u4 "."  u5 u6 u7) : (u0=8) ? (ZAHL := u1 u2  "." u3 u4 u5  "." u6 u7 u8) : (u0=9) ? (ZAHL := u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9) : (u0=10) ? (ZAHL := u1 "." u2 u3 u4 "." u5 u6 u7 "." u8 u9 u10) : (u0=11) ? (ZAHL := u1 u2 "." u3 u4 u5 "." u6 u7 u8 "." u9 u10 u11) : (ZAHL:= u1 u2 u3 "." u4 u5 u6 "." u7 u8 u9  "." u10 u11 u12)
return ZAHL
}

Post Reply

Return to “Ich brauche Hilfe”