0

Einem String eine Zahl zuweisen

Hallo in die Runde,

 

Ich habe Strings in zwei Spalten, so wie "B", "B+", "A", "A+" usw. Ich muss ihnen eine Zahl zuweisen und dann das Gesamtranking ausrechnen, z. B.

 

Rating 1: "A" = 7

Rating 2: "A+" = 8

"Ranking" = (7 + 8) / 2

 

Ich habe versucht das mit folgendem Code zu erreichen:

let x:=0
if 'Rating 1'='A' then
    x:=7;
if 'Rating 1'='A+' then
    x:=7.5;

let z:=0
if 'Rating 2'='A' then
    z:=7;
if 'Rating 2'='A+' then
    z:=7.5;
end;
Ranking:=(x + z) / 2

 

Ich glaube, man sieht gleich, dass hier etwas nicht stimmt, aber was, weiß ich nicht.

Hinzu kommt, dass Ninox gleich einen Fehler meldet, da "A+ " nicht gefunden wurde.

Was soll ich tun?

10 Antworten

null
    • Torsten_Stang.1
    • vor 1 JahrTue, August 1, 2023 at 3:17 PM UTC
    • Gemeldet - anzeigen

    'Rating 1' ist ein Textfeld? Dann muss der Inhalt in doppelten Anführungszeichen stehen...

    let x:=0
    if 'Rating 1'="A" then
        x:=7;
    if 'Rating 1'="A+" then
        x:=7.5;
    let z:=0
    if 'Rating 2'="A" then
        z:=7;
    if 'Rating 2'="A+" then
        z:=7.5;
    end;
    Ranking:=(x + z) / 2
    
      • Denis_Gorbunov
      • vor 1 JahrWed, August 2, 2023 at 7:48 AM UTC
      • Gemeldet - anzeigen

      Danke, Torsten. Ich habe nicht festgestellt, dass ich doppelte Anführungszeichen hätte nutzen sollen. Python-Gewohnheiten.

    • truthein
    • vor 1 JahrTue, August 1, 2023 at 3:53 PM UTC
    • Gemeldet - anzeigen

    Vielleicht löst  schon dein Problem.

    Mich interessiert einfach vermutlich überflüssigerweise aus Neugier zum Verständnis der Situation, die ich wieder mal nicht verstehe:

    • Liegen die Strings fix vor in deiner Tabelle? Oder trägst du die Datensatz für Datensatz ein?
    • Wieviele Strings gibt es insgesamt? 10? 1000? Dynamisch? (so dass neue Strings mit neuer zugeordneter Zahl zu erwarten sind)
      • Denis_Gorbunov
      • vor 1 JahrWed, August 2, 2023 at 7:53 AM UTC
      • Gemeldet - anzeigen

      Bei uns kommen Projekte an, die ich dann bearbeite. Ich trage regelmäßig neue Strings ein mithilfe des Web-Scraping. Insgesamt gibt es so um die 100 Datensätze, die sich nach dem Eintragen nicht mehr ändern.

    • mirko3
    • vor 1 JahrTue, August 1, 2023 at 9:03 PM UTC
    • Gemeldet - anzeigen

    Hallo Denis. Das wird mit if-Abfragen bei noch mehr Ranking umständlich. Vielleicht hilft Dir eine switch-case-Abfrage wie z.B.

    let x := switch 'Rating 1' do
        case "A+":
            7.5
        case "A":
            7
        case "B+":
            6.5
        case "B":
            6
        end;
    let z := switch 'Rating 2' do
        case "A+":
            7.5
        case "A":
            7
        case "B+":
            6.5
        case "B":
            6
        end;
    Ranking := (x + z) / 2
    
      • Denis_Gorbunov
      • vor 1 JahrWed, August 2, 2023 at 7:46 AM UTC
      • Gemeldet - anzeigen

      Cool! Das ist eine effiziente Lösung, da ich tatsächlich mehr Noten habe. Vielen Dank.

    • john_eans
    • vor 1 JahrWed, August 2, 2023 at 4:53 AM UTC
    • Gemeldet - anzeigen

    Moin,

     ich würde das vermutlich über eine Hilfstabelle angehen, in der ich jedem Rating einen Wert zuordne.

     Dann könnte

     1) das Rating über ein Dropdown-Menü ausgewählt werden und

     2) der Zahlenwart sehr einfach ermittelt werden.

    VG

      • Denis_Gorbunov
      • vor 1 JahrWed, August 2, 2023 at 7:58 AM UTC
      • Gemeldet - anzeigen

      Danke für den Vorschlag, Johannes.
      Zum Dropdown-Menü: das Problem ist, dass andere das Rating bestimmen, nicht ich. Ich bekomme nur das Ergebnis ihrer Begutachtung, das ich anschließend zum Berechnen der Gesamtnote nutze.
      Zur Ermittlung des Zahlenwertes: Wie würdest Du das tun, angenommen, das Rating ist schon da? Da oben war ein Vorschlag, die switch-case-Abfrage zu nutzen, was mir die einfachste Lösung zu sein scheint.

      • john_eans
      • vor 1 JahrWed, August 2, 2023 at 10:41 AM UTC
      • Gemeldet - anzeigen

       
      Ich würde ein Tabelle Ratingzuordnung mit den Feldern Rating und Wert anlagen. Das ist dann die Zordnung/Übersetzungstabelle von x-beliebigem Rating (z.B. A+; A; B+; B) zu Zahlenwerten (z.B. 7,5; 7; 6,5; 6).
      Hat m.E. den Vorteil, dass ich die Zuordnung flexibel und übersichtlich editieren kann, und nicht in den Code rein muss. Zudem spart man sich die doppelte Zuordnung im ersten und zweiten switch, und somit auch Fehler.

      let myRating1 := 'Rating 1'
      let myRating2 := 'Rating 2'
      let x := first(select 'Ratingzuordnung' where Rating = myRating1).Wert
      let y := first(select 'Ratingzuordnung' where Rating = myRating2).Wert
      Ranking := (x + z) / 2
      

      In den Feldern Rating 1 und Rating 2 ein Drop-Down einzubauen wäre nur eine Option, könnten natürlich auch einfache Textefelder bleiben.

      Wenn du die Daten aber einliest, dann ist es egal ob Textfeld oder Dropdown, die Daten könnten so oder so in das Feld geschrieben werden.

      VG

      • Denis_Gorbunov
      • vor 1 JahrWed, August 2, 2023 at 1:43 PM UTC
      • Gemeldet - anzeigen

      Du hast Recht - weniger Code und eine übersichtliche Ratingstabelle sind von Vorteil. Danke, Johannes!