Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43257
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 10 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 427
Gesamt: 427
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree2Likes
  • 2 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.11.20
Neues Mitglied
 
Registriert seit: Oct 2016
Ort: Weimar
Beiträge: 17
bigborre befindet sich auf einem aufstrebenden Ast
Standard 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!
  #2 (permalink)  
Alt 23.11.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #3 (permalink)  
Alt 23.11.20
Neues Mitglied
 
Registriert seit: Oct 2016
Ort: Weimar
Beiträge: 17
bigborre befindet sich auf einem aufstrebenden Ast
Standard

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.

  #4 (permalink)  
Alt 23.11.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bigborre Beitrag anzeigen
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 24.11.20
Neues Mitglied
 
Registriert seit: Oct 2016
Ort: Weimar
Beiträge: 17
bigborre befindet sich auf einem aufstrebenden Ast
Standard

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)
  #6 (permalink)  
Alt 24.11.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bigborre Beitrag anzeigen
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
  #7 (permalink)  
Alt 24.11.20
Neues Mitglied
 
Registriert seit: Oct 2016
Ort: Weimar
Beiträge: 17
bigborre befindet sich auf einem aufstrebenden Ast
Standard

Danke!

Habs angepasst und nun keine Warnings mehr.

Gruß
  #8 (permalink)  
Alt 24.11.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
bigborre and AVT like this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 24.11.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Super traderdoc, wieder was dazu gelernt, danke
AVT
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------