|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
StrToInteger (Variable) gibt immer 0 zurück
Hi Coder,
ich habe ein Problem, ich möchte eine String Variable in einen INT umwandeln. In der Variable steht eine Zahl. Code:
string sVariable; int iVariable; sVariable = "20000"; iVariable = StrToInteger(sVariable); Print iVariable; Mit diesem Code: Code:
int iVariable; iVariable = StrToInteger("20000"); Print iVariable; Hat jemand eine Idee wo mein Denkfehler liegt? Ich benötige eine Variable da ich Daten aus einer Datei auslese. Danke! |
|
|||
Eigentlich sollten bei beiden Codes zwei Compilerfehler auftreten, weil bei
Print iVariable; keine Funktionsklammern gesetzt worden. Steht da Print (iVariable); dann klappt das auch. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Danke Traderdoc, du hast da selbstverständlich recht.
Das war zwar nicht mein Problem, der Denkanstoss hat mir aber doch sehr geholfen. In meiner Variable stand "20000" und nicht 20000 daher ging auch die Funktion StrToInteger nicht. |
|
|||
Zitat:
Nochmal, der Ausdruck Print iVariable; kann nicht zum Ergebnis 0 führen, weil durch die Intervention des Compilers eine Ausführung des Programm unmöglich gestaltet. Wodurch war also das Ergebnis 0 möglich? Und wo stand nun 20000 und nicht "20000"? Hätte da 20000 gestanden, wäre zu den beiden Compilerfehlermeldungen noch der Warnhinweis "implicit conversion from 'number' to 'string' " gekommen, sofern #property strict (die Compilerdirektive für eine korrekte Compilation) zu Beginn deklariert wird. Übrigens, auch ohne #property strict wären jedoch die programmausführungsbeschränkenden Compilerfehler gekommen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hallo Traderdoc,
das Hauptproblem war folgendes, ich habe ein CSV File mit Daten gefüllt. Dabei habe ich aus einer anderen Anwendung einen String in das CSV File geschrieben. Das hat dazu geführt das beim Auslesen statt 20000 immer "20000" gelesen wurde. Damit hat die Funktion StrToInteger in diesem Fall nichts bzw. 0 zurück gegeben. Da bin ich mir jetzt nicht ganz sicher. Ich habe das angepasst und in das CSV File nun einen Integer geschrieben. Damit funktioniert es. Mir war nicht bewusst das diese Formatierung im CSV erhalten bleibt. Diesen Warnhinweis "implicit conversion from 'number' to 'string' " bekomme ich in der Tat was mich aber nicht weiter stört. #Property strict wurde definiert. Aber ev. hast du ja eine Idee. Wie gebe ich denn einen Integer aus ohne diese Meldung zu bekommne? Geht das nur mit einer vorherigen Konvertierung in String? Gruß Geändert von bigborre (24.11.20 um 09:25 Uhr) |
|
|||
Zitat:
Der Print() Befehl erwartet einen String, den er printen soll. Hast Du also etwas anderes, was Du printen willst (also etwas, was kein String ist wie z.B. einen integer oder double Zahl), dann mußt Du die erst in einen String umwandeln, also so: Code:
Print( " Integerbeschreibung=",IntegerToString(10), //int Zahl " Doublebeschreibung=",DoubleToString(20,_Digits) //Nachkomma des Symbols oder frei wählbar ); |
|
|||
Danke!
Habs angepasst und nun keine Warnings mehr. Gruß |
|
|||
Ich schreibe es auch gern noch einmal:
Mit dieser Zeile Print iVariable; hätte es nie ein lauffähiges Programm gegeben. Somit steht die erste Frage: lautete die Zeile, die zum Ergebnis 0 geführt hatte so wie oben oder doch so: Print (iVariable); Wenn doch Print (iVariable); von vornherein stand, dann wäre es auch nahezu unwichtig, ob die Variable sVariable den Wert 20000 oder "20000" hatte. Es wäre so oder so 20000 ausgegeben worden und nicht 0. Das zweite Frage ist, muss in der Parameter in der Funktion Print() ein string sein oder nicht? Nein, es muss kein String sein. Das kann auch ein Integer- oder Doublewert sein, selbst ohne Stringkonvertierung. Aber es müssten dann reine Zahlenwerte sein. Sobalb ein Buchstabe dabei ist, muss es in der Tat ein String sein. Die explizite Typenreduzierung des MQL gestattet auch die Umwandlung z.B. eines Integer- oder Double-Wertes in einen String über die Formulierung: double doublewert = 1.2345; string wert = (string)doublewert; Weil der Daten-Typ string die höchste Priorität unter einfachen Typen besitzt, ist damit auch eine explizite Reduzierung der Variable des Typs string zum jeden Zahlentyp zulässig. D.h. selbst so etwas ist zulässig und funktioniert: string str = "255,0,255"; Print(color(str)); oder auch Print((color)str); ergibt in beiden Fälle den Ausdruck: clrFuchsia traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
|
|