StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

30 Sep 2013, 13:59

Ich habe für mein Projekt mal wieder keine Mühen gescheut und habe eine PHP-Funktion zum Rechnen mit Strings in AHK übersetzt.
Die PHP-Funktion ist nicht von mir, ich habe sie aus diesem Forum: Thread in externem Forum [Rechnen mit Strings]
Ich habe sie nach AHK übersetzt und sogar überarbeitet, sodass sie auch (hoffentlich) nach dem Punkt-vor-Strich-System arbeitet:

Code: Select all

StrCalc(str){ ;http://www.php.de/php-tipps-2010/66855-mathematische-berechnung-vom-stringinhalt.html#post507927
	stack := Object()
	v := Object()
	m := Object()
	v[0] := v[1] := op := ""
	pos := 0
	str := RegExReplace(RegExReplace(str, "\s"), "\d+[*/]\d+", "($0)")
	while(pos := RegExMatch(str, "([()+*/^-]|(\-?\d+))", regex, pos + (StrLen(regex1) ? StrLen(regex1) : 1)))
		m.Insert(regex1)
	for i, tk in m
	{
		if(tk = "+" OR tk = "-" OR tk = "*" OR tk = "/" OR tk = "^"){
			op := tk
			continue
		}
		else if(tk = "("){
			stack.Insert([v[0], v[1], op])
			v[0] := v[1] := op := ""
			continue
		}
		else if(tk = ")"){
			kResult := v[0]
			v[0] := stack[stack._maxIndex(), 1]
			v[1] := stack[stack._maxIndex(), 2]
			op := stack[stack._maxIndex(), 3]
			stack.Remove()
			v[(v[0] = "") ? 0 : 1] := kResult
			bracketMode := 1
		}
		if(!bracketMode)
			v[((op = "") && (v[0] = "")) ? 0 : 1] := tk
		if(v[1] != ""){
			if(op = "^")
				v[0] := v[0] ** v[1]
			else
				v[0] := ((op = "+") * (v[0] + v[1])) + ((op = "*") * (v[0] * v[1])) + ((op = "/") * (v[0] / v[1])) + ((op = "-") * (v[0] - v[1]))
			op := v[1] := ""
		}
		bracketMode := 0
	}
	return v[0]
}
Normalerweise sollten alle normalen Rechenarten (+-*/), Klammern, Potenzen (^) und Punkt-vor-Strich-System funktionieren.
Das habe ich jetzt des Öfteren getestet, ich garantiere allerdings keine Richtigkeit der Ergebnisse.
Ein Aufruf sieht zum Beispiel so aus:

Code: Select all

MsgBox, % StrCalc("10 + 20") ;30, die Leerzeichen werden ignoriert
MsgBox, % StrCalc("10^3") ;1000
MsgBox, % StrCalc("20+30*10") ;320, wegen Punkt vor Strich
MsgBox, % StrCalc("(20+30)*10") ;500
Geplant:
  • Potenz vor Punkt
  • Prozent akzeptieren (z.B. "1000*10%" = 100)
Ich hoffe, dass euch das ein wenig weiterhilft
SAPlayer
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 02:38

Hallo SAPlayer,

darf ich StrCalc() in ZackZackOrdner
https://autohotkey.com/boards/viewtopic ... 10&t=15248
a) verwenden?
b) einbinden (Deine Quelltexte mit Quellenangabe)?
c) verändert einbinden (momentan stoert das ".000000" mit Quellenangabe)?

Dies ist nur eine Vorab-Anfrage ungeprüft ob nicht eine der zahlreichen eval() Funktionen besser für ZackZackOrdner geeignet ist.

Danke Gerdi
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 03:08

SAPlayer ist seit über nem Jahr nicht mehr aktiv hier im Forum.
Keine Ahnung ob er überhaupt wieder auftaucht.

Kannst es ja mit ner E-Mail probieren: saplayer.bplaced.net/impressum
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
HinkerLoden
Posts: 93
Joined: 23 Mar 2016, 07:50
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 04:17

gab doch die Monster lib . Ist doch ziemlich das gleiche.
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 04:22

Du meinst eval?
- eval (using JS/COM) von tidbit
- Eval - Evaluate Expressions in Strings Dynamically von Pulover
- ExprEval() - Evaluate Expressions! von Uberi
- eval() - evaluate AutoHotkey expressions dynamically! von fincs

Oder mit ActiveScript von Lexikos

Code: Select all

#NoEnv
#Include ActiveScript.ahk

; eval Function (VBScript)   |   https://msdn.microsoft.com/en-us/library/0z5x4094(v=vs.84).aspx
vb := new ActiveScript("VBScript")
MsgBox % vb.Eval("20+30*10")    ; ==> 320 (Punkt vor Strich)

; eval Method   (JScript)    |   https://msdn.microsoft.com/en-us/library/b51a45x6(v=vs.90).aspx
js := new ActiveScript("JScript")
MsgBox % js.Eval("20+30*10")    ; ==> 320 (Punkt vor Strich)
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 06:39

Danke Euch beiden,
zum Sichten etc. werde ich wie angedeutet erst später kommen.
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 14:08

Klar, das ist gar kein Thema. Kannst das auch abändern wie immer du willst.
Wenn das Ganze mehr mit rechtlichen Lizenzen zugehen soll, wäre das denke ich eine Verbreitung nach Art der WTFPL. Von mir aus auch ohne Nennung des Autors.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

01 Apr 2016, 21:51

1A das du noch mitliest.
Recommends AHK Studio
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: StrCalc - Rechnen mit Strings [Punkt vor Strich, Klammern, P

02 Apr 2016, 09:07

Ich lese eigentlich nicht mehr mit, aber Gerdi hat mir eine Mail geschrieben um mich auf das Thema hinzuweisen ;)

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: No registered users and 19 guests