3

römische Ziffern, roman numbers

Ich teile mal eine Funktion für Ninox, die natürliche in römische Zahlen konvertiert. Die meisten Konvertierer können das bis 3999, da oberhalb davon ein Symbol für 5000 fehlt. Es gibt alternative Schreibweisen, die dies möglich machen - zwei davon habe ich integriert. Will man also dieses Script nutzen, dann sind zwei Parameter einzugeben, die Ziffer und die Schreibweise von 1 bis 3. Vielleicht kann man auch noch ein paar Codezeilen einsparen, mir ist es jedenfalls nicht gelungen.

function NaturalToRoman(arabicNumber : number,spelling : number) do
    let numberAsString := text(arabicNumber);
    let len := length(numberAsString);
    let romanNumbersOne := ["I", "V", "X", "L", "C", "D", "M"];
    let romanNumbersTwo := ["I", "V", "X", "L", "C", "D", "CIↃ", "IↃↃ", "CCIↃↃ"];
    let romanNumbersThree := ["I", "V", "X", "L", "C", "D", "ↀ", "ↁ", "ↂ"];
    let romanNumbers := switch spelling do
        case 1:
            romanNumbersOne
        case 2:
            romanNumbersTwo
        case 3:
            romanNumbersThree
        end;
    let placeholder := ["a", "aa", "aaa", "ab", "b", "ba", "baa", "baaa", "af", "f"];
    let uniqueplaceholder := ["a", "b", "f"];
    let romanNumber := for i in range(len) do
            let part := item(placeholder, number(item(numberAsString, i)) - 1);
            let partRomanNumbers := switch i do
                case len - 5:
                    slice(romanNumbers, 8, 9)
                case len - 4:
                    slice(romanNumbers, 6, 9)
                case len - 3:
                    slice(romanNumbers, 4, 7)
                case len - 2:
                    slice(romanNumbers, 2, 5)
                case len - 1:
                    slice(romanNumbers, 0, 3)
                end;
            join(for j in part do
                let idx := index(uniqueplaceholder, j);
                item(partRomanNumbers, idx)
            end, "")
        end;
    join(romanNumber, "")
end;

So weit so gut. Danach habe ich mir einen Button gebaut, der in einer Tabelle nach Index der Datensätze eine neue (römische) Sortierung in einem Textfeld einsetzt. Der sieht so aus.

let tab := ((select Flights) order by number(Nr));
let allID := tab.number(Nr);
for i in allID do
    let pos := index(tab.number(Nr), i) + 1;
    record(Flights,i).(Rom := NaturalToRoman(pos, 1))
end

Wie immer geht die Idee für so eine Nebensächlichkeit auf den Gedanken zurück, ob und wie es möglich wäre. In meinem Fall wollte ich schlicht in einer Tabelle mit knapp 20 Datensätzen eine zusätzliche Spalte für römische Ziffern haben. Das hatte ich schon händisch erledigt, aber dann…

Gruß Mirko

Antwort

null

Content aside

  • 3 „Gefällt mir“ Klicks
  • gesternZuletzt aktiv
  • 15Ansichten
  • 1 Folge bereits