![]() |
IF-Abfrage genererieren
HiHo,
ich habe da mal ein kleines Problem in meinem Programm welches ich gerade schreibe. Ich habe auch schon die Suche bemüht, da ich jedoch nicht genau weiss worunter ich suchen muss, und/oder soetwas noch nicht gefragt wurde, schreibe ich einen neuen Beitrag. Ich würde gerne eine IF-Abfrage genererieren, oder wie man das auch beschreiben mag ;) Ich habe eine 'Tabelle' in der folgenden Art: Tabelle - Qualitätsstufe | Bedingung | Wert 1. A | größer gleich | 80 2. B | größer gleich | 60 3. C | kleiner | 60 Diese Tabelle kann innerhalb des Programmes editiert werden. Es soll dann z.B. die Zahl 71 eingestuft werden. 1. 71 größer gleich 80 = FALSCH 2. 71 größer gleich 60 = RICHTIG : Ausgabe C Wie kann ich dieses 'Aufbereiten'. Ich habe eine 'Lösung', finde diese jedoch tierisch umständlich.
Delphi-Quellcode:
Und nun meine frage ^^
if Operator = 'größer gleich' then
begin if Wert >= Abfrage then Ergebnis := Quali; end else if Operator = 'größer' then begin if Wert > Abfrage then Ergebnis := Quali; end else if Operator = 'kleiner' then begin if Wert > Abfrage then Ergebnis := Quali; end; Gibt es eine Einfacherer Möglichkeit die if-Abfrage einfacher zu generieren. |
Re: IF-Abfrage genererieren
Hmmm, kann mir keiner helfen? :cry:
|
Re: IF-Abfrage genererieren
Ich glaube, einfacher geht es nicht. Aber in der letzten Abfrage ist ein Fehler: Statt < steht da >.
|
Re: IF-Abfrage genererieren
Da ja überall das Selbe ausgeführt wird, ginge es auch so:
Delphi-Quellcode:
if ((Operator = 'größer gleich') and (Wert >= Abfrage))
or ((Operator = 'größer') and (Wert > Abfrage)) or ((Operator = 'kleiner') and (Wert < Abfrage)) then Ergebnis := Quali; Und wenn du statt dem Text sowas wie 'nen Index verwende würdest, dann könnte man auch noch die "unpraktischen" Textvergleiche einsparen. (z.B. 0=größergleich 1=größer 2=kleiner ...) PS: ich glaub da wolltest du ein "kleiner als" haben?
Code:
[add]
end else if Operator = 'kleiner' then
begin if Wert [color=#ff0000][b]<[/b][/color] Abfrage then Ergebnis := Quali; Zitat:
Zitat:
|
Re: IF-Abfrage genererieren
Du könntest auch Funktionszeiger benutzen, aber ob das bei so wenigen Operatoren wirklich einfacher ist...
Delphi-Quellcode:
[add]Recordfeldernamen etwas dumm gewählt :duck: . [/add]
type
TCompareFunction = function(a, b: Integer): Boolean; TOperator = record Name: string; Function: TCompareFunction; end; [...] myOperators: Array of TOperator = ((Name: 'kleiner', Function: IsLesser), [...] |
Re: IF-Abfrage genererieren
Das mit dem Funktionszeiger ist mir dann doch ein bischen zu 'hoch' :-D
Habt ihr aber beide gut beobachtet, habe oben ein Fehler in den Abfragen himitsu hatte das schon ganz richtig gesehen, das vereinfachen der Abfrage bringt doch schon einiges... Habe mal ein StringGrid mit meinen Qualitätsstufen gefüllt und dann per Button frage ich es ab. Nicht gerade die eleganteste Möglichkeit, aber es reicht mir :-D
Delphi-Quellcode:
Vielen Dank an euch, dann mache ich mich mal an das abspeichern des Grids ^^
procedure TfrmConfig.Button1Click(Sender: TObject);
var i: Integer; begin LabelQGrade.Caption := ''; for i := StringGrid1.RowCount-1 downto 1 do begin if ((StringGrid1.Cells[2,i] = '>=') and (StrToFloat(EditValue1.Text) >= StrToFloat(StringGrid1.Cells[3,i]))) or ((StringGrid1.Cells[2,i] = '>') and (StrToFloat(EditValue1.Text) > StrToFloat(StringGrid1.Cells[3,i]))) or ((StringGrid1.Cells[2,i] = '<=') and (StrToFloat(EditValue1.Text) <= StrToFloat(StringGrid1.Cells[3,i]))) or ((StringGrid1.Cells[2,i] = '<') and (StrToFloat(EditValue1.Text) < StrToFloat(StringGrid1.Cells[3,i]))) then LabelQGrade.Caption := StringGrid1.Cells[1,i] end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz