per RegExReplace Hexadezimalpunkte ersetzen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Rohwedder
Posts: 2212
Joined: 04 Jun 2014, 08:33
Location: Germany

per RegExReplace Hexadezimalpunkte ersetzen

01 Jul 2019, 05:14

Hallo,
Javascript/COM (wie auch Autohotkey) versteht offenbar keine rationalen Zahlen mit Hexadezimalpunkt.
Deswegen wird in dieser Rechenaufgabe:

Code: Select all

q::
Exp := "2 * 0x3.243F6A8885A" ;Rechenaufgabe
; bitte dieses RegexReplace verallgemeinern:
Exp := RegexReplace(Exp,"0x3.243F6A8885A","(0x3243F6A8885A/0x100000000000)")
; die Anzahl der "0" in 0x100000000000 hinter "0x" ist gleich der Anzahl
; der Nach-Hexadezimalpunkt-Stellen von 0x3.243F6A8885A
MsgBox,% "2 * Pi ≈ " Eval(Exp)
Return
eval(exp) ;tidbit: https://www.autohotkey.com/boards/viewtopic.php?f=6&t=15389
{ ;(gekürzt!) Uses Javascript/COM to evaluate stringed math expressions.
    obj:=ComObjCreate("HTMLfile")
    obj.write("<body><script>document.body.innerText=eval('" exp "');</script>")
    return inStr(cabbage:=obj.body.innerText, "body") ? "ERROR" : cabbage
}
das hexadezimale Pi ≈ 0x3.243F6A8885A vorab per Primitiv-RegexReplace in einen Quotienten aus ganzen Hexzahlen umgewandelt.
Mein Ziel ist es das Primitiv-RegexReplace durch ein allgemeines zu ersetzen.
Die Position des Punktes sollte doch irgendwie mit dem Metazeichen \G erfassbar sein und zur Generierung des 0xFF... -Divisor verwendet werden können?
Edit: Da war leider ein Fehler drin!
Last edited by Rohwedder on 02 Jul 2019, 03:08, edited 1 time in total.
just me
Posts: 6486
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: per RegExReplace Hexadezimalpunkte ersetzen

01 Jul 2019, 06:51

Moin Rohwedder,

durch Deine Frage habe ich schon mal gelernt, dass es erlaubt ist, innerhalb der hexadezimalen Darstellung einen "Hexadezimalpunkt" zu verwenden. Welcher praktische Hintergrund führt dich zu dieser Frage?
Last edited by just me on 01 Jul 2019, 09:59, edited 1 time in total.
Rohwedder
Posts: 2212
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: per RegExReplace Hexadezimalpunkte ersetzen

01 Jul 2019, 09:27

Verboten? Das meinen vielleicht Programmierer! Aber, deren Mathematik ist nur etwas höher als die der Kaufleute welche keine negativen Zahlen kennen und stattdessen von Soll und Haben reden.
Autohotkeys Format() kennt immerhin die Typenzeichen a und A: Vorzeichenfähiger hexadezimaler Floating-Point-Wert mit doppelter Genauigkeit im Format [?]0xh.hhhh p±dd. Hierbei repräsentiert h.hhhh die Hexadezimalstellen (kleingeschrieben) der Mantisse und dd eine oder mehrere Stellen des Exponenten.
Welcher praktische Hintergrund?
Machte bei https://www.autohotkey.com/boards/viewtopic.php?p=279817#p279817 mit.
Dort wollte vsub einen Rechner welcher das Ergebnis in hex und dez präsentiert.
Ich hatte die hexadezimale Ausgabezeile beigesteuert, natürlich mit richtigen rationalen Hexzahlen, d.h. nicht dieser [?]0xh.hhhh p±dd-Quatsch. Vollständigkeitshalber wollte ich nun die Eingabezeile ebenfalls tauglich für Floating-Point-Hexzahlen machen.
In meinen Haupt-Skript verwende ich übrigens Floating-Point-Hex-Farbwerte zur Beschreibung der Durchschnittsfarben von Flächen.
Rohwedder
Posts: 2212
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: per RegExReplace Hexadezimalpunkte ersetzen

02 Jul 2019, 02:16

Hallo,
ich habe es nun mit einem länglichen Zweizeiler gelöst. Bin aber noch auf der Suche nach einer eleganteren Methode.

Code: Select all

q::
Exp := "2 * 0x3.243F6A8885A" ;Rechenaufgabe
While, RegExMatch(Exp, "(0x[[:xdigit:]]*\.)([[:xdigit:]]*)", M)
	Exp := StrReplace(Exp,M,"(" StrReplace(M,".") "/0x1" RegexReplace(M2,".","0") ")")
MsgBox,% "2 * Pi ≈ " Eval(Exp)
Return
eval(exp) ;tidbit: https://www.autohotkey.com/boards/viewtopic.php?f=6&t=15389
{ ;(gekürzt!) Uses Javascript/COM to evaluate stringed math expressions.
    obj:=ComObjCreate("HTMLfile")
    obj.write("<body><script>document.body.innerText=eval('" exp "');</script>")
    return inStr(cabbage:=obj.body.innerText, "body") ? "ERROR" : cabbage
}

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 19 guests