代码之家  ›  专栏  ›  技术社区  ›  Jaffer Wilson Dilip kumar

无法将文件读入结构MQL5 MT5

  •  0
  • Jaffer Wilson Dilip kumar  · 技术社区  · 6 年前

    struct file_row_struct
    {
       datetime file_time;
       string file_range_green;
       string file_range_red;
       double file_dist_green_red;
       double file_slope_green;
       double file_slope_red;
       string file_prev_color;
       string file_current_color;   
    }filerow[];
    
    int size = 1;
    FileReader = FileOpen(file_read_path,FILE_READ|FILE_CSV,','); 
       if(FileReader != INVALID_HANDLE)
       {
       //while(!FileIsEnding(FileReader))
       //   linecount++;
       while(!FileIsEnding(FileReader))
          {
             FileReadStruct(FileReader,filerow,size); 
             size++; 
    
          }   
       Print("File Opened successfully");
       //PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
       FileClose(FileReader);
       }
       else Print("Not Successful in opening file:  %s  ", GetLastError());
    

    样本文件的要点可从以下网址获得: Sample data

    'filerow' - structures containing objects are not allowed   NeuralExpert.mq5    108 36
    

    请告诉我我弄错了什么。我的猜测是结构中存在字符串成员函数的可用性,因此它是不允许的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel Kniaz    6 年前

    结构是MQL中的简单类型。这意味着您可以在其中包含各种整型值和浮点值(任何强制转换为ulong和double的值)以及其他一些值。这也意味着您不能在其中包含字符串和其他结构。如果结构中有字符串,则无法通过引用传递和许多其他问题(因此,最好是说结构中不支持复杂类型,您可能仍然有它们,但您有责任正确地执行所有操作)。
    由于不能通过引用传递结构,因此不能使用 FileReadStruct() .
    我建议使用 CObject-based 和班级 CArrayObj filerow[] .

    class CFileRow : public CObject
       {
    //8 fields
    public:
        CFileRow(const string line)
          {
          //convert string line that you are to read from file into class
          }
        ~CFileRow(){}
       };
    CArrayObj* fileRowArray = new CArrayObj();
    
    while(!FileIsEnding(FileReader))
      {
         string line=FileReadString(FileReader);
         fileRowArray.Add(new CFileRow(line));
      }
    
    推荐文章