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

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   StrToInteger (Variable) gibt immer 0 zurück (http://www.expert-advisor.com/forum/showthread.php?t=6838)

bigborre 23.11.20 14:06

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;

Bei der Ausgabe kommt immer 0.

Mit diesem Code:

Code:


int iVariable;




iVariable = StrToInteger("20000");
Print iVariable;

funktioniert das ganze.

Hat jemand eine Idee wo mein Denkfehler liegt?
Ich benötige eine Variable da ich Daten aus einer Datei auslese.

Danke!

traderdoc 23.11.20 16:23

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

bigborre 23.11.20 21:45

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.

:)

traderdoc 23.11.20 22:31

Zitat:

Zitat von bigborre (Beitrag 44698)
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.

:)

Das verstehe ich nicht.
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

bigborre 24.11.20 09:15

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ß

AVT 24.11.20 09:40

Zitat:

Zitat von bigborre (Beitrag 44700)
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?

Fang bitte gar nicht erst so an, zu sagen sowas stört Dich nicht. Das ist schlicht unsaubere Programmierung und solche Angewohnheiten können später mal ernstere Konsequenzen haben. Das nur nebenbei.

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
    );

AVT

bigborre 24.11.20 09:46

Danke!

Habs angepasst und nun keine Warnings mehr.

Gruß

traderdoc 24.11.20 16:01

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

AVT 24.11.20 17:36

Super traderdoc, wieder was dazu gelernt, danke :)
AVT


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:40 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