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)
-   -   Bestimmten Wert aus String auslesen (http://www.expert-advisor.com/forum/showthread.php?t=3326)

Ca$hDigger 08.11.13 01:42

Bestimmten Wert aus String auslesen
 
Guten Tag,

wenn ein String mit mehreren Werten besteht, wie kann man daraus einen bestimmten Wert (zb den 5. Wert in der Reihe des Strings) auslesen und in eine int oder double Variable schreiben?

Gruß

C$D

Trabo 08.11.13 09:49

wenn es immer der 5 Wert ist, kannst du es einfach mit einer schleife durchjagen und raussuchen.

strtodouble() nimmt das zeichen und formt es als double
strtointgr() nimmt das zeichen und formt es als eine ganze zahl

die schreibeweise des quellcodes ist nciht ganz korrekt, unter der hilfe siehst du den befehl aber direkt.

bsb:
string variable[0] = "2.25";
strtodouble(variable[0],2) --> 2.2 // als double
strtodouble(variable[0],3) --> 2.25 // als double

Lg

Ca$hDigger 08.11.13 12:06

Irgendwie ist der Wurm drin:

Code:

string variable = 111+","+222+","+333+","+444+","+555;

double test_double = StrToDouble(variable[0],2);

int test_int = StrToInteger(variable[0]);

Gibt des in [] die Position an? Wenn ich jetzt den 5. Wert (555) in die variable test_double bzw test_int bekommen will wie ist dann der richtige code?

Gruß

traderdoc 08.11.13 16:07

Da ist ein bißchen viel Quatsch dabei, @Trabo.
Die Lösung sieht u.a. so aus.

Code:

int cnt = 0;
string str;
string wert = "";
string variable = 111+","+222+","+333+","+444+","+555;
for (int i = 0; i < StringLen(variable); i++) {
  str = StringSubstr(variable, i, 1);
  if (str = ",") cnt++;
  if (cnt == 4 && str != ",") wert = wert + str;
  if (cnt == 5) break;
}
double zahl1 = StrToDouble(wert);
int zahl2 = StrToInteger(wert);

Viel Spaß

traderdoc

Ca$hDigger 08.11.13 17:20

Danke das funktioniert. Noch eine Frage dazu, wie müsste der Code aussehen damit man alle Werte eines String in einzelne Variablen zerlegt?

Gruß

traderdoc 08.11.13 17:34

Für 5 Werte:

Code:

string wert[4];
int cnt = 0;
string str;
wert[0] = "";
string variable = 111+","+222+","+333+","+444+","+555;
for (int i = 0; i < StringLen(variable); i++) {
  str = StringSubstr(variable, i, 1);
  if (str == ",") {
      cnt++;
      wert[cnt] = "";
      continue;
  }
  wert[cnt] = wert[cnt] + str;
}

Viel Spaß!

traderdoc

Ca$hDigger 08.11.13 17:46

Du bist echt eine riesen Hilfe. Funktioniert, Klasse danke!

Ca$hDigger 19.11.13 22:28

Zitat:

Zitat von traderdoc (Beitrag 24091)
Für 5 Werte:

Code:

string wert[4];
int cnt = 0;
string str;
wert[0] = "";
string variable = 111+","+222+","+333+","+444+","+555;
for (int i = 0; i < StringLen(variable); i++) {
  str = StringSubstr(variable, i, 1);
  if (str == ",") {
      cnt++;
      wert[cnt] = "";
      continue;
  }
  wert[cnt] = wert[cnt] + str;
}

Viel Spaß!

traderdoc


Guten Tag,

wenn man den string wert[4]; nicht als string sondern als double-array haben möchte (sonst gibts bei mir in weiterer Verwendung "different types in comparison") wie muss man das anstellen? Ändere ich einfach string zu double bekomme ich die Fehlermeldung "incompatible types".

LG

traderdoc 19.11.13 23:15

Code:

double irgendwas[4];
string wert[4];
int cnt = 0;
string str;
wert[0] = "";
string variable = 111+","+222+","+333+","+444+","+555;
for (int i = 0; i < StringLen(variable); i++) {
  str = StringSubstr(variable, i, 1);
  if (str == ",") {
      cnt++;
      wert[cnt] = "";
      continue;
  }
  wert[cnt] = wert[cnt] + str;
  irgendwas[cnt] = StrToDouble(wert[cnt]);
}


Ca$hDigger 20.11.13 01:10

Danke. Mir ist aufgefallen das so der letzte Wert als 0 ausgegeben wird.
Stelle ich den Wert von "double irgendwas" einen Wert höher ist das Problem gelöst, hab ich durch Probieren rausgefunden.

Letzter Wert = 0
Code:

double irgendwas[4];
string wert[4];

Letzter Wert korrekt
Code:

double irgendwas[5];
string wert[4];

Kann man das so dann lassen bzw muss der double dann immer +1 vom string sein oder hab ich vielleicht irgendwo ein Fehler gemacht?


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