1

cnt Array mit Bedingung

Hallo zusammen,

kann ich z.B. alle "a" in einem Array zählen?

Ich habe ein Textfeld "originalText" mit beliebigem Text. Über folgenden Code

let cleanText := lower(replace(originalText, " ", ""));
let myList := sort(unique(split(cleanText, "")));
join(myList, "
")

erzeug ich in einem Berechnungsfeld eine Liste mit den im Text vorkommenden Buchstaben. Jetzt hätte ich dahinter gerne noch die Anzahl der Vorkommen. Über cnt und where kann ich aber wohl keine Arrays mit Bedingung durchsuchen.

Das Ergebniss sollte irgendwie so aussehen

originalText = "Hallo Text"

Berechnungsfeld =

a = 1
e = 1
h = 1
l = 2
o = 1
t = 2
x = 1

Allgemein gesagt wäre die Anforderung also:

Wie oft kommt jedes item aus Array1 in Array2 vor?

 

Vielen Dank für Ideen und Anregungen

Johannes

4 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Johannes, mein Lösungsvorschlag ist wahrscheinlich nicht sehr elegant, sollte aber funktionieren:

    let A1 := split(replacex(lower(originalText), "[^a-z0-9]", ""), "");
    let A2 := unique(A1);
    let A3 := for i2 in A2 do
            let CZ := 0;
            for i1 in A1 do
                CZ := if i1 = i2 then CZ + 1 else CZ end
            end;
            i2 + " = " + CZ
        end;
    join(A3, "
    ")

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ach so, du wolltest es ja auch noch sortieren. Dann halt

     

    ...
    join(sort(A3), "
    ")

    • john_eans
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja wunderbar! Herzlichen Dank! Und mit replacex gleich nochmal was dazu gelernt. Erspart mir an anderer Stelle das verschachteln von replace.

    11 Zeilen Code für die Aufgabe find ich übrigens mehr als elegant.

    • john_eans
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ein bisschen kürzer hab ich es jetzt doch noch...

    let A := split(replacex(lower(originalText), "[^a-z0-9]", ""), "");
    let B := unique(A);
    let C := for ii in B do
    let D := for tt in A do
    if ii = tt then ii end
    end;
    ii + " = " + cnt(D)
    end;
    join(sort(C), "
    ")