任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1116

 
Top2n:

好时间,如何在完成的文件.csv中添加新的一行,并将其转移到第1行 - 如果可能的话?或者其他的东西,但没有重新计算/循环现有的数据。除非允许更新列名和行名

int GenerateCsv(string fileName)
  {
   int handle= FileOpen(fileName,FILE_CSV|FILE_WRITE," "),x=0,y=0; 

移除FILE_CSV,如果你 使用"\n\t "格式,则使用FILE_ANSI 代替。

 
alexsis78:

移除FILE_CSV,如果你使用"\n\t "等,则使用FILE_ANSI 代替。

我需要使用FileReadArray在一个新的条形图上添加一个新行
 
Top2n:
你好,任务是覆盖一个二维数组,是BIN格式的,请问该函数能识别二维数组的输入吗?

文件写入阵列

还是只按行分开写?
当然,它将读作一个二维数组。对不起,没有冒犯的意思...写一个2x2元素的测试数组,读取它,看看不是更容易吗?
 
Alexey Viktorov:
当然,它将读作二维的。对不起,没有冒犯的意思...直接写一个2x2元素的测试数组,读取它,看看不是更容易吗?

NULL空值被写入文件。arrayZ是二维的

//+------------------------------------------------------------------+
//| Запись n элементов массива в файл                                |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- откроем файл
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- запишем данные массива в конец файла
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arrayZ,0,n);
      //--- закрываем файл
      FileClose(handle);
     }
   else
      Print("Failed to open the file, error ",GetLastError());
  }
如果我写的是一维的,bin显示的是象形文字,二维的就会识别为NULL一维写了什么东西
 
Top2n:

NULL空值被写入文件。arrayZ是二维的

//+------------------------------------------------------------------+
//| Запись n элементов массива в файл                                |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- откроем файл
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- запишем данные массива в конец файла
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arrayZ,0,n);
      //--- закрываем файл
      FileClose(handle);
     }
   else
      Print("Failed to open the file, error ",GetLastError());
  }

我今天太懒了,没有时间...在文档中,在你复制这个函数的地方,他们甚至写了结构的数组。如果你不改变它,文档中给出的整个例子是否有效?你自己检查一下,如果不行,你就得写到CD上。

 
不要将FileWriteArray和FileReadArray锐化器用于它们不打算用于的目的。
这些都是序列化的功能。如果你想以文本可读的格式打开文件--向文件写入字符串。
string s = StringFormat("first line: %s\n", first);
s += StringFormat("second line: %s\n", second);
s += StringFormat("third line: %s\n", third);
文件写入(s)。
等等,诸如此类。
读取FileRead并解析每一行(你必须玩一玩,但如果你想要可读性,你就必须这样做)。
像孩子一样,天哪。他们期望从一个时髦的圣诞奇迹中,像它会很好地做一切事情,把它全部填满,并把它的格式))))。
总的来说,祝大家圣诞快乐,好运气))))。
 
alexsis78:
不要将FileWriteArray和FileReadArray锐化器用于它们不打算用于的目的。
这些都是序列化的功能。如果你想以文本可读的格式打开文件--向文件写入字符串。
string s = StringFormat("first line: %s\n", first);
s += StringFormat("second line: %s\n", second);
s += StringFormat("third line: %s\n", third);
文件写入(s)。
等等,诸如此类。
读取FileRead并解析每一行(你必须玩一玩,但如果你想要可读性,你就必须这样做)。
像孩子一样,天哪。他们期望从一个时髦的圣诞奇迹中,像它会很好地完成一切,把它全部填满,并把它的格式))))。
总的来说,圣诞快乐,祝大家圣诞快乐!))))。
序列化会做得很好,数组是巨大的。而可读的格式是第一次,以检查填写的保真度。
 

你能告诉我是否有可能绕过从csv导入二维数组。从指标中提取一个三(或二)维数组到EA中?

CFileReadDouble 是否考虑一个二维数组,如果是,如何考虑?

一般来说,应该用什么操作来把csv矩阵转换成数组?

一般来说,我不明白,比如说,举个例子

ArrayResize(time_buff,size);
      //--- прочитаем данные из файла
      for(int i=0;i<size;i++)
        {
         time_buff[i]=(datetime)FileReadDouble(file_handle);
         ma_buff[i]=FileReadDouble(file_handle);
        }

这样,在数组time_buff[i]和ma_buff[i]中写入相同的数据。

例子来自https://www.mql5.com/ru/docs/files/filereaddouble

而如果我有一个二维数组,我怎么能安排枚举。

如果我使用FileReadString, 我需要指定字符串的长度,我需要知道字符串中的数字数量,而不是单元格?

显然,我应该使用FileReadNumber,但这太奇怪了

Документация по MQL5: Файловые операции / FileReadDouble
Документация по MQL5: Файловые операции / FileReadDouble
  • www.mql5.com
Файловые операции / FileReadDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Top2n:

你能告诉我是否有可能绕过从csv导入二维数组。从指标中提取一个三(或二)维数组到EA中?

CFileReadDouble 是否考虑一个二维数组,如果是,如何考虑?

一般来说,应该用什么操作来把csv矩阵转换成数组?

一般来说,我不明白,比如说,举个例子

ArrayResize(time_buff,size);
      //--- прочитаем данные из файла
      for(int i=0;i<size;i++)
        {
         time_buff[i]=(datetime)FileReadDouble(file_handle);
         ma_buff[i]=FileReadDouble(file_handle);
        }

这样,在数组time_buff[i]和ma_buff[i]中写入相同的数据。

例子来自https://www.mql5.com/ru/docs/files/filereaddouble

而如果我有一个二维数组,我怎么能安排枚举。

如果我使用FileReadString, 我需要指定字符串的长度,我需要知道字符串中的数字数量,而不是单元格?

显然,我应该使用FileReadNumber,但这太奇怪了

当我们谈到写一个数组FileWriteArray()时,你是如何尝试读取所写的内容的?
 
Alexey Viktorov:
请告诉我,当我们谈到写一个数组FileWriteArray()时,你是如何尝试读取所写的内容的?

//--- путь к файлу
   string path=InpDirectoryName+"//"+InpFileName;
//--- откроем файл
   ResetLastError();
   int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      //--- прочитаем все данные из файла в массив
      FileReadArray(file_handle,arr);
      //--- получим размер массива
      int size=ArraySize(arr);
      //--- распечатаем данные из массива
         Print(" = ",arr[0][0]," = ",arr[1][1]," = ",arr[2][2]);
      Print("Total data = ",size);
      //--- закрываем файл
      FileClose(file_handle);
     }
   else
      Print("File open failed, error ",GetLastError());
2017.01.09 17:20:40.609 TorFid_v02 (EURUSD,H1)  = 0.0  = 0.0  = 0.0
2017.01.09 17:20:40.609 TorFid_v02 (EURUSD,H1)  Total data = 1020100

我明白缺少什么,即反向转换为二维数组,但我不明白如何

当然,除非我正确地保存它。

for(int z=1; z<=ARRAY_SIZE_Y; z++) // Перебор по барам, колонка Y
        {
         for(int q=1; q<ARRAY_SIZE_X-1; q++) // Перебор по периоду, колонка X
           {
            arr[q][z]=NormalizeDouble(sm.d[q+1].m[nBar-z],5);                // M(I) SMA
           }
        }
      WriteData(1000);
//+------------------------------------------------------------------+
//| Запись n элементов массива в файл                                |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- откроем файл
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- запишем данные массива в конец файла
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- закрываем файл
      FileClose(handle);
     }
   else
      Print("Failed to open the file, error ",GetLastError());
  }