Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Codeschnipsel (http://www.expert-advisor.com/forum/forumdisplay.php?f=292)
-   -   Code Snippets - Eingabeprüfung leicht gemacht (http://www.expert-advisor.com/forum/showthread.php?t=5258)

Kronenchakra 03.11.16 22:17

Code Snippets - Eingabeprüfung leicht gemacht
 
Die Prüfung von Eingabewerten ist lästig, aber wichtig.
Also muß wieder eine Bibliotheksfunktion geschaffen (oder gefunden, wie hier) werden.
Ich nenne diese ValidRange() - Wertebereichsüberprüfung.
Die Parameter sind, denke ich, selbsterklärend.
Code:

int ValidRange(int aVal,  // zu überprüfender Wert
              int aMin,  // Minimum
              int aMax,  // Maximum
              string aMsg="Eingabewert") // Text für die Fehlermeldung

gibt gültigen Wert im Bereich von aMin bis aMax zurück

Beispiel: Eingabe einer integer Zahl zwischen 1 und 3
Die Verwendung im Programm:
Code:

input int inp_Number = 3;    // Number of LR Channels (1 - 3)

// die Eingabeprüfung
int Number = ValidRange(inp_Number,1,3, "Anzahl Channels");

// kurze Variante, Text "Eingabewert" wird defaultmäßig verwenden
int Number = ValidRange(inp_Number,1,3);

Die Bibliotheksfunktion Variante MessageBox:
Code:

int ValidRange(int aVal, int aMin, int aMax, string aMsg="Eingabewert")
{
  int flags=MB_OK | MB_ICONWARNING;    // bitweises OR
  if(aVal<aMin)
  {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu klein. Wird auf "+IntegerToString(aMin)+" korrigiert","* EINGABEFEHLER *",flags);
      return(aMin);    // Minimalwert zurückgeben
  }
  if(aVal>aMax)
  {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu groß. Wird auf "+IntegerToString(aMax)+" korrigiert","* EINGABEFEHLER *",flags);
      return(aMax);    // Maximalwert zueückgeben
  }
  return(aVal);        // Wert war im gültigen Bereich
}

Die Bibliotheksfunktion Variante Print:
Code:

int ValidRange(int aVal, int aMin, int aMax, string aMsg="Eingabewert")
{
  if(aVal<aMin) {Print(aMsg+" ",aVal, " zu klein. Wird auf ",aMin, " korrigiert"); return(aMin);}
  if(aVal>aMax) {Print(aMsg+" ",aVal, " zu groß. Wird auf " ,aMax, " korrigiert"); return(aMax);}
  return(aVal);
}

Ja, es ist trivial, aber nützlich ;)
Kann man natürlich auch für long oder double (mit gleichem Namen, der Compiler erkennt das) definieren.

Hier die long Variante:
Code:

long ValidRange(long aVal, long aMin, long aMax, string aMsg="Eingabewert")
{
  int flags=MB_OK | MB_ICONWARNING;    // bitweises OR
  if(aVal<aMin)
  {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu klein. Wird auf "+IntegerToString(aMin)+" korrigiert","* EINGABEFEHLER *",flags);
      return(aMin);    // Minimalwert zurückgeben
  }
  if(aVal>aMax)
  {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu groß. Wird auf "+IntegerToString(aMax)+" korrigiert","* EINGABEFEHLER *",flags);
      return(aMax);    // Maximalwert zueückgeben
  }
  return(aVal);        // Wert war im gültigen Bereich
}

Bei double benötigen wir noch die Anzahl Dezimalstellen als weiteren Parameter:
Code:

double ValidRange(double aVal, double aMin, double aMax, int aDigits=3, string aMsg="Eingabewert")
{
  int flags=MB_OK | MB_ICONWARNING;    // bitweises OR
  if(aVal<aMin)
  {
      MessageBox(aMsg+" "+DoubleToString(aVal,aDigits)+" zu klein. Wird auf "+DoubleToString(aMin,aDigits)+" korrigiert","* EINGABEFEHLER *",flags);
      return(aMin);    // Minimalwert zurückgeben
  }
  if(aVal>aMax)
  {
      MessageBox(aMsg+" "+DoubleToString(aVal,aDigits)+" zu groß. Wird auf "+DoubleToString(aMax,aDigits)+" korrigiert","* EINGABEFEHLER *",flags);
      return(aMax);    // Maximalwert zueückgeben
  }
  return(aVal);        // Wert war im gültigen Bereich
}

Damit wird Eingabeprüfung zur einfachen Übung.


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:07 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum