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)
-   -   Fehler beim Datei auslesen (http://www.expert-advisor.com/forum/showthread.php?t=6708)

Raul0 25.06.20 09:04

Fehler beim Datei auslesen
 
Hallo,

ich möchte eine CSV Datei auslesen. Leider erhalte ich nicht die richtigen Werte in der gewünschten Reihenfolge.
Die gewünschte Reihenfolge lautet:
OrderTicket, OrderSymbol, OrderType, OrderLots, OrderOpenPrice, OrderStopLoss, OrderTakeProfit.

Empfangen per Printausgabe im MT4: 0 358864481 0 0.0 2.0 0.01 1.10108

In der CSV Datei steht es richtig: 358864481,EURUSD,2,0.01,1.10108,0,0

Und so sieht die mql aus:

PHP-Code:

   //Datei öffnen
   
int file_handle FileOpenPipesdateiFILE_READ|FILE_CSV|FILE_COMMON',');
   
//if( file_handle == INVALID_HANDLE ) { Comment("\n Fehler, siehe Reiter Experten"); PrintFormat( "Error, code = %d", GetLastError() ); }

   
if( file_handle >= 
   {
      
int    W1 FileReadInteger(file_handle);
      
string W2 FileReadString(file_handle);
      
int    W3 FileReadInteger(file_handle);
      
double W4 FileReadNumber(file_handle);
      
double W5 FileReadNumber(file_handle);
      
double W6 FileReadNumber(file_handle);
      
double W7 FileReadNumber(file_handle);
      Print(
"Empfangen: "W1 ," ",W2," ",W3 ," ",W4," ",W5," ",W6," ",W7 ); 
      
FileClosefile_handle );

   } 

Der Fehler tritt auf, wenn ich verschiedene Variablen aufrufe, lasse ich alles auf double, dann stimmt die Reihenfolge. Was mache ich an der Stelle falsch?

Gruss, Raul

AVT 25.06.20 14:27

Zitat:

Zitat von Raul0 (Beitrag 43965)
Hallo,

ich möchte eine CSV Datei auslesen. Leider erhalte ich nicht die richtigen Werte in der gewünschten Reihenfolge.
Die gewünschte Reihenfolge lautet:
OrderTicket, OrderSymbol, OrderType, OrderLots, OrderOpenPrice, OrderStopLoss, OrderTakeProfit.

Empfangen per Printausgabe im MT4: 0 358864481 0 0.0 2.0 0.01 1.10108

In der CSV Datei steht es richtig: 358864481,EURUSD,2,0.01,1.10108,0,0

Der Fehler tritt auf, wenn ich verschiedene Variablen aufrufe, lasse ich alles auf double, dann stimmt die Reihenfolge. Was mache ich an der Stelle falsch?l

Meine Auslese Funktion sieht z.B. so aus (den Kommentar lasse ich immer drin, damit ich dran denke, die Art zu berücksichtigen):
Code:

  int handle=FileOpen(ConfigCVS, FILE_CSV|FILE_READ,Delim);
  if(handle>0)
  {
      /* Examples how to write and read the values
        1. Variabel = true||false
        => write: BoolToInteger(Variable)
        => saved: as 1||0
        => read : StrToInteger(FileReadString(handle));
        2. Variable = "13:00"
        => write: Variable
        => saved: as 13:00
        => read : FileReadString(handle);
        3. Variable = "Arial"
        => write: Variable
        => saved: as Arial
        => read : FileReadString(handle);
        =============== colors
        BEST: always convert colors to uint type, as we don't know what user inputs
        x. Variable = clrColor
            Variable = C'128,128,128'
        => convert: ColorToARGB(Variable,255); //TableChoiceHasNoAlpha
        => write: ColorToARGB(Variable,255);
        => write: ColorToString(Variable);
        => saved: as 128,128,128
        => read : (color)StringToColor(FileReadString(handle));
      */
      MAGIC            = StrToInteger(FileReadString(handle));
      ASDSHOWSIG        = (bool)StrToInteger(FileReadString(handle));
      LOOKBACKBARS      = StrToInteger(FileReadString(handle));
      ASDMAPRICE        = (ENUM_APPLIED_PRICE)StrToInteger(FileReadString(handle));
      ASDMAKIND        = (ENUM_MA_METHOD)StrToInteger(FileReadString(handle));
      ASDPOS            = (ENUM_BASE_CORNER)StrToInteger(FileReadString(handle));
      ASDCOLORLONG      = (color)StringToColor(FileReadString(handle));
      ASDCOLORSHORT    = (color)StringToColor(FileReadString(handle));
      ASDCOLOREXIT      = (color)StringToColor(FileReadString(handle));

      if(FileIsEnding(handle)==true) FileClose(handle);
  }

BoolToInteger is ne Minifunktion, die eine Benutzereingabe =true||false umwandelt.

Versuch es also mal bei jedem Wert, der nicht Double ist, die Art voranzustellen. AVT

traderdoc 25.06.20 17:21

Yep, ich empfehle auch immer allen, die Daten als String in die csv zu speichern und auch als solche auszulesen, um sie erst dann in die entsprechenden Variablentypen umzuwandeln.

traderdoc


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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