Zahlen in Worte umwandeln

  • Hi,

    vielleicht gibts das noch nicht :)

    Spoiler anzeigen
    [autoit]

    ;
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Zahlen in Worte", 537, 81, 192, 114)
    $in = GUICtrlCreateInput("", 72, 16, 233, 21)
    $Label1 = GUICtrlCreateLabel("Eingabe:", 16, 24, 46, 17)
    $out = GUICtrlCreateInput("", 72, 40, 449, 21)
    $Label2 = GUICtrlCreateLabel("Ausgabe:", 16, 40, 49, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $z, $w, $r, $i, $Zahl_In_Worten, $Ziffer, $vi

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $in
    $w = ""
    GUICtrlSetData($out, "")
    GUICtrlSetData($out, tozahl(GUICtrlRead($in)))
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func tozahl($z)
    For $i = 6 To 0 Step -3
    If StringLen($z) > $i Then
    $r = StringRight($z / (10 ^ $i), 3)
    If $r > 99 Then
    $w = Ziffer(1, StringLeft($r, 1), $w) & "hundert"
    $r = StringRight($r, 2)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $r > 19 Then
    $w = Ziffer(3, StringRight($r, 1), $w)
    $w = Ziffer(4, StringLeft($r, 1), $w)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $i = 0 And StringMid($z,StringLen($z)-2,2) = "00" And $r > 0 Then $w = $w & "und"

    [/autoit] [autoit][/autoit] [autoit]

    If $r < 10 Then $w = Ziffer(1, $r, $w)

    [/autoit] [autoit][/autoit] [autoit]

    If $r > 9 And $r < 20 Then $w = Ziffer(2, StringRight($r, 1), $w)
    If $vi = 6 And StringLen($z) = 7 And $r = 1 Then $w = "einemillion"
    If $i = 6 And StringRight($z / 10 ^ $i, 3) > 1 Then $w = $w & "millionen"
    If $i = 3 And StringRight($z / 10 ^ $i, 3) > 0 Then $w = $w & "tausend"
    If $i = 0 And $r = 1 Then $w = $w & "s"
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    if $z = 0 then $w = "null"
    return $w
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Ziffer($Par, $r, $w)
    $x = 'ein,zwei,drei,vier,fünf,sech,sieb,acht,neun'
    $x = StringSplit($x,",")
    $x[0] = ""
    $w = $w & $x[$r]
    Select
    Case $Par = 1 Or $Par = 3
    If $r = 6 Then $w = $w & "s"
    If $r = 7 Then $w = $w & "en"
    If $Par = 3 And $r > 0 Then $w = $w & "und"
    Case $Par = 2
    $w = $w & "zehn"
    If $r = 1 Then $w = StringLeft($w, StringLen($w) - 7) & "elf"
    If $r = 2 Then $w = StringLeft($w, StringLen($w) - 8) & "zwölf"
    Case $Par = 4
    If $r = 2 Then $w = StringLeft($w, StringLen($w) - 4) & "zwan"
    $w = $w & "zig"
    If $r = 3 Then $w = StringLeft($w, StringLen($w) - 3) & "ßig"
    EndSelect
    return $w
    EndFunc

    [/autoit]

    In Zeile 52 musste ich leider was seltsames einfügen, irgendwie kommt da meistens eine "9" rein, keine Ahnung, wie das zustande kommt...

    Ansonsten läufts, bei mehr als 6-stelligen Zahlen langt die Output-Zeile nicht mehr für den "ersten Blick" ;)

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    2 Mal editiert, zuletzt von x0r (17. April 2013 um 10:56) aus folgendem Grund: Zeile 52 fixed

  • [autoit]

    Func Ziffer($Par, $r, $w)
    $x = 'ein,zwei,drei,vier,fünf,sech,sieb,acht,neun'
    $x = StringSplit($x,",")
    $w = $w & $x[$r]

    [/autoit]

    Hab das jetzt nicht nachgeprüft, aber hier steckt schonmal eine 9 in $x[0]. Vllt ist das deine 9 :)

    Insgesamt sehr schön umgesetzt ;)

  • Irgendwo is aber nen Fehler drin:

    Eingabe:1002
    Ausgabe: zweitausendundzwei

    scheint als würde die tausenderstelle von der einerstelle beeinflusst denn
    Eingabe 1004 ergibt viertausendundvier

    Edit: auch sehr interessant:
    Eingabe: 60077
    Ausgabe: siebenundzigtausendsiebenundzig

    UNPLEASANT SPOILER

    You just lost the game!

  • das is mal interessant...

    mal sehen, wann ich zum fixen komme, momentan is bissl viel auf arbeit :thumbdown:

    danke für den tipp ;)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.