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 Jahr
    • 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 Jahr
      • Gemeldet - anzeigen

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

    • truthein
    • vor 1 Jahr
    • 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 Jahr
      • 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 Jahr
    • 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 Jahr
      • Gemeldet - anzeigen

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

    • john_eans
    • vor 1 Jahr
    • 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 Jahr
      • 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 Jahr
      • 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 Jahr
      • Gemeldet - anzeigen

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