在新的一行写到文件中 - 页 3

 
Alexey Viktorov:

而这个概念只为你在表面上.........

我的意思是,"自己做实验 "的建议(概念)不需要说出来,它已经很清楚了。我完全理解,我自己也考虑过这个选项,因为它是最简单的,但对我来说,就上述情况而言,它不是很合适。

 
EfremovSergey:

这里有一个问题:有10个程序写入文件,另外10个程序从文件中读取,你不希望每个读取程序都处理所有时间的累积数据。

而在这种情况下,最好是完全放弃文件,用SQLite数据库 工作。这与处理文件非常相似,你也可以在共享文件夹中创建,但处理、搜索和删除字符串要容易得多。

 

谢尔盖,如果你不需要用眼睛看这个文件,那么就把你的数据数组一次性写进去吧

int eHandle=FileOpen(eFileName,FILE_BIN|FILE_WRITE);
if(eHandle!=INVALID_HANDLE)
   {
   //сначала записываем размер массива
   FileWriteInteger(eHandle,ArraySize(eArray),INT_VALUE);
   //выгружаем данные из массива в файл
   FileWriteArray(eHandle,eArray,0,WHOLE_ARRAY);
   FileClose(eHandle);
   }

然后在任何时候从文件中取出阵列

if(FileIsExist(eFileName))
   {
   eHandle=FileOpen(eFileName,FILE_BIN|FILE_READ);
   if(eHandle!=INVALID_HANDLE)
      {
      //сначала читаем и устанавливаем размер массива
      ArrayResize(eArray,FileReadInteger(eHandle,INT_VALUE));
      //затем выгружаем данные из файла в массив
      FileReadArray(eHandle,eArray,0,WHOLE_ARRAY);
      FileClose(eHandle);
      }
   }

并随心所欲地使用该阵列。删除最后一个元素,增加更多。

 
Alexey Viktorov:

而在这种情况下,最好是完全放弃文件,用SQLite数据库工作。这与处理文件非常相似,你也可以在共享文件夹中创建,但处理、搜索和删除行要容易得多。

MQL4支持与SQLite一起工作 吗? 不是只有TXT和CSV格式吗?

对文件的访问是通过符号链接完成的,文件在哪里,在哪个文件夹中并不重要。

 
Aleksei Stepanenko:

谢尔盖,如果你不需要用眼睛看这个文件,那么就把你的数据数组一次性写进去吧

然后在任何时候从文件中取出阵列

并随心所欲地使用该阵列。删除最后一个元素,添加另一个。

那么,有什么区别呢?在任何情况下,数组都是逐行写入文件的,或者在这种情况下,有可能至少删除最后一个或第一个元素,array=string?

 

我不太明白这个问题。你有一个数据数组,你可以轻松地对其进行任何形式的操作。并在四行代码中对文件进行简单的写和读。这就是优势。为什么要考虑数组 是如何写入文件 的?

你在阵列中做必要的修改,把修改后的阵列上传到一个文件中,就可以了。

 
Aleksei Stepanenko:

我不太明白这个问题。你有一个数据数组,你可以轻松地对其进行任何形式的操作。并在四行代码中对文件进行简单的写和读。这就是优势。为什么要考虑数组 是如何写入文件 的?

你在阵列中做必要的修改,把修改后的阵列上传到一个文件中,就可以了。

这里的困难在于,20个应用程序将不得不同时处理一个相同的数组,而且不可能确定在当前时刻哪个特定的数组编辑版本是相关的。

假设第一个专家顾问编辑了一个数组并发布了它,另一个版本的数组被写在上面,没有考虑到之前的数组,就这样......混乱了......

例如,如果每个专家顾问都能在读取后删除相关的行,那么一切都会顺利进行--没有人打扰任何人,文件也不会因为冗余的数据而超载,但每次编辑的数组都是以竞赛的方式写入,那么如何同步20个专家顾问中每个人的数据的实际情况就不清楚。

 

管理多个EA对同一文件的访问是你需要考虑的问题。

这里有一些东西供你思考。

1.为了防止两个EA同时在同一个文件上工作,创建另一个标志文件。当这个文件不存在时,专家顾问有权用数据打开文件,在此之前,创建一个文件标志,向其他人显示它目前正在忙。在读-写之后,EA删除了文件标志。这些数据现在可供任何其他EA自由使用。

2.你可以制作变量来收集任何使用过该阵列中数据的专家顾问的信息。将这些变量写在同一个文件中。

3.取代通常的数组,创建一个结构数组,其中包括不同类型的数据,而且非常直观。

struct MyData
   {
   int EANumber;
   datetime writeTime;
   double mydata1;
   double mydata2;
   } mydata[];
 
Aleksei Stepanenko:

多个EA访问同一文件的管理是你需要考虑的问题。


当几个Expert Advisors需要写入+添加+选择+读取一个数据集时,那么数据库就会被胡乱地卷入。

你可以使用"全局变量"和标志,但为什么不呢?

这就是数据库的作用。不同的,关系型的,NoSQL和其他的,但这是他们的。而在他们的机械中,一切都经过多年和几十年的微调。所有locs-flags-semaphores-mutexes。
试图复制它是对时间的疯狂浪费。

 
正是如此!