Seite 1 von 1

Funktion ähnlich DEC2HEX

Verfasst: Sa, 08.03.2014 10:25
von clag
Hallo Kenner und Könner,

ich möchte aus Zahlen möglichst kurze IDs generieren dazu sollen die IDs ähnlich der Wandlung Dezimal zu Hexadezimal erzeugt werden.
Allerdings nicht unter Verwendung des echten DEC2HEX() und HEX2DEC() aber genauso und mit 20 Paaren für 0-19.
Das in einer Tabelle mit OUOTIENT() REST() SVERWEIS() zu realisieren war nicht schwer, ist für intensive Anwendung aber eher nicht geeignet,
darum würde ich gern zwei eigene Funktionen dafür erzeugen. (die Potenz geht nicht über 3 "160000") also 4 stellige IDs.

Kann man irgendwo den original Code für DEC2HEX() und HEX3DEC() einsehen und ggf abwandeln?
Vielleicht hatte auch Jemand schon einmal so einen Wunsch und es gibt so etwas schon?
Oder hat jemand eine Idee, wie man das als eigene Funktion gestalten kann und zeigt es mal?

schon mal Danke fürs lesen und ggf einsetzen von Hirnschmalz ;)

Re: Funktion ähnlich DEC2HEX

Verfasst: Sa, 08.03.2014 15:46
von clag
@ Mod bitte dieses Thema in das Basic Forum verschieben erledigt! lorbass, Mod
Hallo zusammen,
prinzipiell habe ich meine zwei Funktionen schon erstellt leider funktioniert die
ID2DEC() Funktion noch nicht richtig der "String" wird nicht richtig übernommen
die Funktion soll natürlich wie eine richtige Formel sowohl eine Verknüpfung als auch einen direkt eingegebenen String umwandeln
"0000"-"JJJJ"

Wie übergebe ich einen "String" richtig, aus der Zelle an die Funktion, speziell die führenden Nullen verschwinden gerne :o ?
hier ist mal mein Entwurf, als Makro tut es schon richtig nur die String Übergabe klemmt noch

Code: Alles auswählen

FUNCTION DID2DEC(chkstr as variant)

myDID=chkstr.string
print myDID
trim(myDID)

Dim Liste as Variant
Liste = Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J")

base4=8000
base3=400
base2=20
base1=0

digi4=left(myDID,1)
value4=0
while liste (value4) <> digi4
value4=value4+1
if value4 > 19 then print "falscher WERT " 
wend
value4=value4*base4

myDID=right(myDID,3)
digi3=left(myDID,1)
value3=0
while liste (value3) <> digi3
value3=value3+1
if value3 > 19 then print "falscher WERT " 
wend
value3=value3*base3

myDID=right(myDID,2)
digi2=left(myDID,1)
value2=0
while liste (value2) <> digi2
value2=value2+1
if value2 > 19 then print "falscher WERT " 
wend
value2=value2+base2

digi1=right(myDID,1)

value1=0
while liste (value1) <> digi1
value1=value1+1
if value1 > 19 then print "falscher WERT " 
wend
value1=value1*1

DiD2Dec=value4 + value3 + value2 + value1

End FUNCTION

Re: Funktion ähnlich DEC2HEX

Verfasst: Sa, 08.03.2014 16:01
von Karolus
Hallo

Nochmal eine Antwort auf "pythonisch":

Code: Alles auswählen

In [3]: int('jj',20)
Out[3]: 399
Karolus

Re: Funktion ähnlich DEC2HEX

Verfasst: Sa, 08.03.2014 16:14
von clag
Hahaha Karolus

das scheint ja Teufelswerk zu sein was du da anbietest
ich sehe wohl das der Python Code das erwartete Ergebnis liefert und super kurz ist

aber verstehen tu ich nix :(

kannst du das in kleinen Happen und gaaanz langsam für Dummies erklären
oder vielleicht mal auf mein Basic Monster eingehen :lol:

Re: Funktion ähnlich DEC2HEX

Verfasst: Sa, 08.03.2014 17:12
von Karolus
Hallo

Die Erklärung gibts in ausführlich hier

Oben wird mit der int() function eine Zahlenrepresentation 'jj' zur Basis 20 in die entsprechende Dezimalzahl gewandelt, was in etwa das gleiche tut wie deine Funktion?

Gegenfrage: wie soll ich ein Beispiel mit zwei Zeilen offensichtlichem Inhalts in kleinerere Häppchen zerlegen?



Karolus