Hallo Semjon,
Das ist kein fehlerfreies Ook, da es einen
blanken ‚Ook‘ nicht gibt, jeder Befehl hat
4 Zeichen. Fehlt da vielleicht die Hälfte?
Da es aber auf ein Ook! folgt, muß es wahr-
scheinlich Ook. heißen 
ja, macht Sinn.
Mein ook-Interpreter sagt:
$> ook ernestos.ook
09.464/20.785
Wie unfair
), ich mußte mir erst was basteln in Excel-Vba was diesen Ook-Code in eine ablauffähige Vba-Prozedur wandelte.
Aber danke dir, da ich dasselbe raushabe kann ich deshalb davon ausgehen daß mein Code einigermaßen hinhaut.
Auch den Hello World-Ook-Code von Wikipedia hat mein Code übersetzt.
Nachstehend der Excel-Vba-Code der die Prozedur Ook3Txt erstellt und die Prozedur.
Vielleicht braucht das ja mal jemand wenn er im Zoo mit den Affen chatten will *grins*
Der Code erwartet den OOk-Code in den Zellen von Tabelle3.
Im aktiven Blatt wird die erzeugte Prozedur angezeigt den muß man dann nur in ein Modul kopieren und starten, war mir jetzt zu aufwendig die Prozedur gleich in ein Modul zu schreiben ud zu starten.
Die Zellenhüpperei des Ook-Codes findet in einem neu erzeugten Blatt statt, Startzelle ist AA1
Gruß
Reinhard
in Modul1:
Option Explicit
Public P() As String, Anz As Long, Einr As Byte
'
Sub Ook()
Dim Zei, Spa, Zelle, strOok, N
ReDim P(3)
P(0) = "Sub Ook2Txt()"
P(1) = "Dim Ausgabe As String"
P(2) = "Worksheets.Add"
P(3) = "Range(""AA1"").Select"
Anz = 3
With Worksheets("Tabelle1")
.UsedRange.ClearContents
For Each Zelle In Worksheets("Tabelle3").UsedRange
If Zelle.Value "" Then strOok = strOok & Zelle.Value
Next Zelle
strOok = Replace(strOok, "Ook", "")
For N = 1 To Len(strOok) / 2
Call Check(Mid(strOok, (N - 1) \* 2 + 1, 2))
Next N
Anz = Anz + 2
ReDim Preserve P(Anz)
P(Anz - 1) = "Msgbox Ausgabe"
P(Anz) = "End Sub"
End With
For N = 0 To Anz
Cells(N + 1, 1) = P(N)
Next N
End Sub
'
Sub Check(ByVal Zeichen As String)
Dim Z
Select Case Zeichen
Case "..", "+" '+ den Wert der aktuellen Zelle um 1 erhöhen
If P(Anz) Like String(Einr, " ") & "ActiveCell = ActiveCell +\*" Then
P(Anz) = String(Einr, " ") & "ActiveCell = ActiveCell + " & CInt(Mid(P(Anz), 27 + Einr)) + 1
Else
Anz = Anz + 1
ReDim Preserve P(Anz)
P(Anz) = String(Einr, " ") & "ActiveCell = ActiveCell + 1"
End If
Case "!!", "-" '- den Wert der aktuellen Zelle um 1 verringern
If P(Anz) Like String(Einr, " ") & "ActiveCell = ActiveCell -\*" Then
P(Anz) = String(Einr, " ") & "ActiveCell = ActiveCell - " & CInt(Mid(P(Anz), 27 + Einr)) + 1
Else
Anz = Anz + 1
ReDim Preserve P(Anz)
P(Anz) = String(Einr, " ") & "ActiveCell = ActiveCell - 1"
End If
Case ".?", "\>" '\> eine Zelle nach rechts gehen
If P(Anz) Like "ActiveCell.Offset(0, \*" Then
Z = CInt(Replace(Replace(P(Anz), String(Einr, " ") & "ActiveCell.Offset(0, ", ""), ").Select", "")) + 1
P(Anz) = String(Einr, " ") & "ActiveCell.Offset(0, " & Z & ").Select"
Else
Anz = Anz + 1
ReDim Preserve P(Anz)
P(Anz) = String(Einr, " ") & "ActiveCell.Offset(0, 1).Select"
End If
Case "?.", "-" ' 0"
Einr = Einr + 3
Case "?!", "]" '] Schleifenende - beendet die Schleife, wenn der Wert der aktuellen Zelle gleich 0 ist
Einr = Einr - 3
Anz = Anz + 1
ReDim Preserve P(Anz)
P(Anz) = String(Einr, " ") & "Wend"
Case "!.", "." '. den Wert der aktuellen Zelle ausdrucken
Anz = Anz + 1
ReDim Preserve P(Anz)
P(Anz) = String(Einr, " ") & "Ausgabe= Ausgabe & Chr(ActiveCell.value)"
Case ".!", "," ', einen Wert von der Tastatur in die aktuelle Zelle einlesen
Anz = Anz + 1
ReDim Preserve P(Anz)
P(Anz) = String(Einr, " ") & "Activecell=Inputbox(""Ein Zeichen eingeben"")"
Case Else
MsgBox "Fehler bei Zeichen " & Zeichen
End Select
End Sub
Die erzeugte Prozedur:
Sub Ook2Txt()
Dim Ausgabe As String
Worksheets.Add
Range("AA1").Select
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell + 4
While ActiveCell 0
ActiveCell.Offset(0, -1).Select
ActiveCell = ActiveCell + 3
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell - 1
Wend
ActiveCell.Offset(0, -1).Select
While ActiveCell 0
ActiveCell.Offset(0, -1).Select
ActiveCell = ActiveCell + 4
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell - 1
Wend
ActiveCell.Offset(0, -1).Select
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell + 3
While ActiveCell 0
ActiveCell.Offset(0, -1).Select
ActiveCell = ActiveCell + 3
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell - 1
Wend
ActiveCell.Offset(0, -1).Select
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell - 11
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell + 6
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell + 2
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell - 2
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell - 5
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell + 3
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell - 2
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell - 2
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell + 3
While ActiveCell 0
ActiveCell.Offset(0, -1).Select
ActiveCell = ActiveCell + 3
ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell - 1
Wend
ActiveCell.Offset(0, -1).Select
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell + 1
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
ActiveCell = ActiveCell - 3
Ausgabe = Ausgabe & Chr(ActiveCell.Value)
MsgBox Ausgabe
End Sub