新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 481

 
STARIJ:

打开文件 进行书写时,你指定了TXT或CSV。这是一个文本文件。把它读成一个字符串,选择StringSubstr并把它转换成你想要的东西

void Write_File()
{
    int handle;
    static double BlueL,RedL;
    string B_level= DoubleToStr(BlueLine, Digits);
    string R_level= DoubleToStr(RedLine, Digits);
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
    
      if(BlueLine!=BlueL||RedLine!=RedL)
       {
       Sleep(10000);//подождем 10 сек, пока оператор меняет уровни
       
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_CSV|FILE_READ|FILE_WRITE," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      FileSeek(handle,0,SEEK_END);

      // Если новый файл - записать имя файла и строку заголовков колонок
      if(FileSize(handle)==0)
      {
         FileWrite(handle,f_name);
         FileWrite(handle,"Изменение Уровней   BlueLine   RedLine");
      }
      // Сбор информации и запись в файл
      FileWrite(handle,TimeToStr(TimeCurrent()), "  ",B_level, "  ",R_level);
      FileClose(handle);
      BlueL=BlueLine;RedL=RedLine;
      }
      return;
   }

这就是写作的方式!。TCT

对不起,我现在不明白如何准确地把B_level和R_level 弄出来。我不需要日期和时间!不过我确实想把它们写下来)

 
Rewerpool:

这就是写作的方式!。TCT

对不起,我现在不明白如何准确地把B_level和R_level 弄出来。我不需要日期和时间!但我确实想把它写下来)

读取为字符串,高亮显示StringSubstr 并转换为你需要的内容。读取为字符串,分配StringSubstr并转换为你需要的任何东西

 
STARIJ:

读取为一个字符串,分配一个StringSubstr并转换为你需要的任何东西。读取为一个字符串,选择StringSubstr并转换为任何

啊啊啊啊啊啊,知道了!!!。就是这样!!!。谢谢@STARIJ!我会试一试的)

 

@STARIJ 不工作,还搞不清楚我哪里错了!帮助!

double BlueLine,RedLine;

void Read_File()
{
    int handle;
    string B_level;
    string R_level;
    static double BlueL=StrToDouble(B_level);
    static double RedL=StrToDouble(R_level);
    
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
     if(BlueL!=BlueLine||RedL!=RedLine)
     {
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_CSV|FILE_READ|FILE_WRITE," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      FileSeek(handle,0,SEEK_END);
      
      // Чтение информации из файла
      FileReadString(handle,B_level= StringSubstr(f_name,16,7),R_level= StringSubstr(f_name,23,7));
      FileClose(handle);
      
      BlueLine=BlueL;RedLine=RedL;
      }
      return;
   }
1 这里犯了错误,但我做错了什么?
 

他为什么不喜欢这样?

2

 
Rewerpool:

为什么它不像这样呢?


看看你传递给函数的参数是什么,有多少,以及它返回什么。

点击f1,事先将光标放在这个函数上

 
Rewerpool:

@STARIJ 不工作,还搞不清楚我哪里错了!帮助!

这里犯了错误,但我做错了什么?
首先让我们读一下最后一个字符串
   int handla = FileOpen("1111.txt",FILE_TXT|FILE_READ," ");   // TXT !!!!!!!
   string s;
   while(!FileIsEnding(handla))  s=FileReadString(handla,100);
   Alert(s);
   FileClose(handla);

2018.02.26 12:49 1.24368 1.22581 现在 ...突出显示StringSubstr并转换为你需要的内容。一切都要按部就班地进行。匆忙是程序员的一个敌人。

   double Синяя=StrToDouble(StringSubstr(s,20,7));
   double Красн=StrToDouble(StringSubstr(s,31,7));
   Alert(DoubleToStr(Синяя,5), "   ", DoubleToStr(Красн,5));

读取为字符串,分配StringSubstr并转换为字符串。 读取为字符串,分配StringSubstr并转换为字符串

 
STARIJ:
首先让我们读一下最后一个字符串

2018.02.26 12:49 1.24368 1.22581 现在 ...分配StringSubstr并转换为你需要的东西。你必须一步一步地做每件事。匆忙是程序员的一个敌人。

读取为字符串,分配StringSubstr并转换为字符串。 读取为字符串,分配StringSubstr并转换为字符串

STARIJ: 谢谢你的分析!

重做了!现在,这些数字不知道为什么加起来不对了!

文件中的数字是这样的。

2018.02.26 17:44    1.24938    1.22771

而同样的《警报》给出了这些。

他在1.2后面的零是怎么来的?我已经尝试过正常化。没有!

1

代码是这样写的。

void Read_File()
{
    int handle;
    string str;
    static double BlueL;
    static double RedL;
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
     if(BlueL!=BlueLine||RedL!=RedLine)
     {
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_READ|FILE_TXT," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      
       while(!FileIsEnding(handle)) //Читаем последнюю строку
       str=FileReadString(handle,60);//Чтение строки из файла
       FileClose(handle);
       BlueL=StrToDouble(StringSubstr(str,16,7));
       RedL=StrToDouble(StringSubstr(str,23,7));
       Alert(DoubleToStr(BlueL,5), "   ", DoubleToStr(RedL,5));
       ObjectSet("BlueLine",OBJPROP_PRICE1,BlueL);
       ObjectSet("RedLine",OBJPROP_PRICE1,RedL);
      }
      return;
   }
 
Rewerpool:

STARIJ : 谢谢你的分析!
重做了!现在,这些数字不知道为什么加起来不对了!
文件中的数字是:
,但同样的Alert给出的是:
,它在1.2后面的零是怎么来的?我已经尝试过正常化。没有!
我的代码是这样写的。

我写的是StringSubstr(str,20,7),你写的是StringSubstr(str,16,7)。 从1.24938中减去最后4位,得到1.2。 我告诉过你--要按顺序做每件事。我有Alert(s); - 打印你读到的字符串,以确保它是正确的,而你却急着写ObjectSet(.编程就是要有耐心,一小步一小步地往前走--而你却在论坛上大喊大叫。当你在等待答案的时候--你可以采取多少个自信的小步骤!!。
 
Rewerpool:

STARIJ: 谢谢你的分析!

重做了!现在,这些数字不知道为什么加起来不对了!

文件中的数字是这样的。

而同样的《警报》给出了这些。

他在1.2后面的零是怎么来的?我已经尝试过正常化。没有!

我的代码是这样写的。

试试这个。


void Read_File()
{
    int handle;
    string str;
    static double BlueL;
    static double RedL;
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
     if(BlueL!=BlueLine||RedL!=RedLine)
     {
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_READ|FILE_TXT," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      
       while(!FileIsEnding(handle)) //Читаем последнюю строку
       str=FileReadString(handle,60);//Чтение строки из файла
       FileClose(handle);
       BlueL=StrToDouble(StringSubstr(str,20,7));   
       RedL=StrToDouble(StringSubstr(str,31,7));    
       Alert(DoubleToStr(BlueL,5), "   ", DoubleToStr(RedL,5));
       ObjectSet("BlueLine",OBJPROP_PRICE1,BlueL);
       ObjectSet("RedLine",OBJPROP_PRICE1,RedL);
      }
      return;
   }