Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1116

 
Top2n:

Bom tempo, como adicionar uma nova linha ao arquivo.csv acabado, com uma mudança para a 1ª linha - se possível? Ou de alguma outra forma, mas sem recalcular/reciclagem dos dados existentes. A menos que seja permitido atualizar nomes de colunas e linhas

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

Remova FILE_CSV, use FILE_ANSI em seu lugar se você usaro formato"\t", etc.

 
alexsis78:

Remova FILE_CSV, use FILE_ANSI em seu lugar se vocêusar"\t" etc.

Eu preciso usarFileReadArray para adicionar uma nova linha em um novo bar
 
Top2n:
Olá, a tarefa é sobrescrever uma matriz bidimensional, em formato BIN, a função irá reconhecer uma matriz bidimensional como entrada?

FileWriteArray

Ou apenas escreva separadamente por linhas?
É claro que será lido como uma matriz bidimensional. Desculpe, sem ofensa... não seria mais fácil escrever uma matriz de teste de 2x2 elementos, lê-la e ver?
 
Alexey Viktorov:
É claro que se lê em duas dimensões. Desculpe, sem ofensa... Não seria mais fácil apenas escrever uma matriz de teste de 2x2 elementos, lê-la e ver?

Os valores vazios NULL são escritos no arquivo.arrayZ é bidimensional

//+------------------------------------------------------------------+
//| Запись 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());
  }
Se eu escrever uma dimensão, bin mostra hieróglifos, duas dimensões reconhecem como NULL uma dimensão tem escrito algo
 
Top2n:

Os valores vazios NULL são escritos no arquivo.arrayZ é bidimensional

//+------------------------------------------------------------------+
//| Запись 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());
  }

Hoje estou muito preguiçoso e não tenho tempo... Na documentação, onde você copiou esta função, eles até mesmo escrevem um conjunto de estruturas. Todo o exemplo dado na documentação funciona, se você não o mudar? Verifique você mesmo, se não funcionar, você tem que escrever para o CD.

 
Não utilize afiadores FileWriteArray e FileReadArray para fins para os quais não são destinados.
Estas são funções de serialização. Se você quiser abrir o arquivo em formato legível em texto - escreva seqüência de caracteres em arquivo.
string s = StringFormat("primeira linha: %s\n", primeiro);
s += StringFormat("segunda linha: %s\n", segunda);
s += StringFormat("terceira linha: %s\n", terceira);
FileWrite(s);
e assim por diante e assim por diante.
Para ler FileReadir e analisar cada linha (você tem que brincar, mas terá que fazê-lo se quiser legibilidade).
Como as crianças, por amor de Deus. Eles esperam de um milagre do Funky Christmas, como se ele fizesse tudo muito bem, enchesse tudo e formatasse )))).
Em geral, Feliz Natal para todos, boa sorte ))))
 
alexsis78:
Não utilize afiadores FileWriteArray e FileReadArray para fins para os quais não são destinados.
Estas são funções de serialização. Se você quiser abrir o arquivo em formato legível em texto - escreva seqüência de caracteres em arquivo.
string s = StringFormat("primeira linha: %s\n", primeiro);
s += StringFormat("segunda linha: %s\n", segunda);
s += StringFormat("terceira linha: %s\n", terceira);
FileWrite(s);
e assim por diante e assim por diante.
Para ler FileReadir e analisar cada linha (você tem que brincar, mas terá que fazê-lo se quiser legibilidade).
Como as crianças, por amor de Deus. Eles esperam de um milagre do Funky Christmas, como se ele fizesse tudo muito bem, enchesse tudo e formatasse )))).
Em geral, Feliz Natal e Feliz Natal para todos )))).
A serialização vai dar certo, o conjunto é enorme. E o formato legível é pela primeira vez, para verificar a fidelidade do enchimento.
 

Você pode me dizer se é possível contornar a importação de uma matriz bidimensional do csv. extraindo uma matriz tridimensional (ou duas) do indicador para o EA?

C OFileReadDouble considera uma matriz bidimensional, se sim, como?

Em geral, qual operação deve ser usada para converter uma matriz csv em uma matriz?

Em geral, eu não entendo como, por exemplo, tomar um exemplo

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

como isto, escrever os mesmos dados na matriztime_buff[i]ema_buff[i]

exemplo de https://www.mql5.com/ru/docs/files/filereaddouble

E se eu tenho uma matriz bidimensional, como posso organizar a enumeração?

Se eu usarFileReadString, preciso especificar o comprimento da cadeia, preciso saber o número de dígitos da cadeia, não células, mas dígitos?

Aparentemente, eu deveria usarFileReadNumber, mas é muito estranho

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

Você pode me dizer se é possível contornar a importação de uma matriz bidimensional do csv. extraindo uma matriz tridimensional (ou duas) do indicador para o EA?

C OFileReadDouble considera uma matriz bidimensional, se sim, como?

Em geral, qual operação deve ser usada para converter uma matriz csv em uma matriz?

Em geral, eu não entendo como, por exemplo, tomar um exemplo

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

como isto, escrever os mesmos dados na matriztime_buff[i]ema_buff[i]

exemplo de https://www.mql5.com/ru/docs/files/filereaddouble

E se eu tenho uma matriz bidimensional, como posso organizar a enumeração?

Se eu usarFileReadString, preciso especificar o comprimento da cadeia, preciso saber o número de dígitos da cadeia, não de células?

Aparentemente, eu deveria usarFileReadNumber, mas é muito estranho

Quando falamos em escrever um array FileWriteArray(), como você tentou ler o que foi escrito?
 
Alexey Viktorov:
E por favor me diga, quando falamos em escrever um array FileWriteArray(), como você tentou ler o que foi escrito?

//--- путь к файлу
   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

Entendo o que falta, a conversão inversa para uma matriz 2D, mas não entendo como

A menos, é claro, que eu o tenha guardado corretamente.

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());
  }

Razão: