Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1116

 
Top2n:

Bon moment, comment ajouter une nouvelle ligne au fichier .csv terminé, avec un décalage à la 1ère ligne - si possible ? Ou d'une autre manière, mais sans recalculer/recycler les données existantes. Sauf s'il est autorisé à mettre à jour les noms des colonnes et des lignes.

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

Supprimez FILE_CSV, utilisez FILE_ANSI à la place si vous utilisez leformat"\n\t", etc.

 
alexsis78:

Supprimez FILE_CSV, utilisez FILE_ANSI à la place si vousutilisez"\n\t" etc.

J'ai besoin d'utiliserFileReadArray pour ajouter une nouvelle ligne à une nouvelle barre.
 
Top2n:
Bonjour, la tâche consiste à écraser un tableau à deux dimensions, au format BIN, la fonction reconnaîtra-t-elle un tableau à deux dimensions comme entrée ?

FileWriteArray

Ou seulement écrire séparément par rangs ?
Bien sûr, il sera lu comme un tableau à deux dimensions. Désolé, sans vouloir vous offenser... Ne serait-il pas plus simple d'écrire un tableau de test de 2x2 éléments, de le lire et de voir ?
 
Alexey Viktorov:
Bien sûr que ça va se lire en deux dimensions. Désolé, sans vouloir vous offenser... Ne serait-il pas plus simple d'écrire un tableau de test de 2x2 éléments, de le lire et de voir ?

Les valeurs vides NULL sont écrites dans le fichier.arrayZ est bidimensionnel.

//+------------------------------------------------------------------+
//| Запись 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());
  }
Si j'écris en une dimension, bin montre des hiéroglyphes, deux dimensions reconnaissent comme NULL une dimension a écrit quelque chose.
 
Top2n:

Les valeurs vides NULL sont écrites dans le fichier.arrayZ est bidimensionnel.

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

Je suis trop paresseux aujourd'hui et je n'ai pas le temps... Dans la documentation, où vous avez copié cette fonction, ils écrivent même un tableau de structures. L'exemple complet donné dans la documentation fonctionne-t-il, si vous ne le modifiez pas ? Vérifiez vous-même, si cela ne fonctionne pas, vous devez écrire sur le CD.

 
N'utilisez pas les aiguiseurs FileWriteArray et FileReadArray à des fins pour lesquelles ils ne sont pas prévus.
Il s'agit de fonctions de sérialisation. Si vous voulez ouvrir le fichier dans un format lisible par le texte, écrivez une chaîne de caractères dans le fichier.
string s = StringFormat("première ligne : %s\n", first) ;
s += StringFormat("deuxième ligne : %s\n", deuxième) ;
s += StringFormat("troisième ligne : %s\n", troisième) ;
FileWrite(s) ;
et ainsi de suite.
Pour lire FileRead et analyser chaque ligne (vous devez jouer autour, mais vous devrez le faire si vous voulez une bonne lisibilité).
Comme des enfants, bon sang. Ils attendent d'un Funky Christmas un miracle, comme s'il allait tout faire gentiment, tout remplir et le formater )))).
En général, joyeux Noël à tous, bonne chance )))).
 
alexsis78:
N'utilisez pas les aiguiseurs FileWriteArray et FileReadArray à des fins pour lesquelles ils ne sont pas prévus.
Il s'agit de fonctions de sérialisation. Si vous voulez ouvrir le fichier dans un format lisible par le texte, écrivez une chaîne de caractères dans le fichier.
string s = StringFormat("première ligne : %s\n", first) ;
s += StringFormat("deuxième ligne : %s\n", deuxième) ;
s += StringFormat("troisième ligne : %s\n", troisième) ;
FileWrite(s) ;
et ainsi de suite.
Pour lire FileRead et analyser chaque ligne (vous devez jouer autour, mais vous devrez le faire si vous voulez une bonne lisibilité).
Comme des enfants, bon sang. Ils attendent d'un Funky Christmas un miracle, comme s'il allait tout faire gentiment, tout remplir et le formater )))).
En général, joyeux Noël et bonne fête à tous )))).
La sérialisation se fera bien, le tableau est énorme. Et le format lisible permet, pour la première fois, de vérifier la fidélité du remplissage.
 

Pouvez-vous me dire s'il est possible de contourner l'importation d'un tableau à deux dimensions depuis csv. en extrayant un tableau à trois (ou deux) dimensions depuis l'indicateur vers l'EA ?

CFileReadDouble prend-il en compte un tableau à deux dimensions, et si oui, comment ?

En général, quelle opération doit être utilisée pour convertir une matrice csv en tableau ?

De manière générale, je ne comprends pas comment, par exemple, prendre un exemple

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

comment cela, écrire les mêmes données dans le tableautime_buff[i]etma_buff[i]

exemple tiré de https://www.mql5.com/ru/docs/files/filereaddouble

Et si j'ai un tableau à deux dimensions, comment puis-je organiser l'énumération.

Si j'utiliseFileReadString, je dois spécifier la longueur de la chaîne, j'ai besoin de connaître le nombre de chiffres dans la chaîne, pas les cellules ?

Apparemment, je devrais utiliserFileReadNumber, mais c'est trop bizarre.

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

Pouvez-vous me dire s'il est possible de contourner l'importation d'un tableau à deux dimensions depuis csv. en extrayant un tableau à trois (ou deux) dimensions depuis l'indicateur vers l'EA ?

CFileReadDouble prend-il en compte un tableau à deux dimensions, et si oui, comment ?

En général, quelle opération doit être utilisée pour convertir une matrice csv en tableau ?

De manière générale, je ne comprends pas comment, par exemple, prendre un exemple

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

comment cela, écrire les mêmes données dans le tableautime_buff[i]etma_buff[i]

exemple tiré de https://www.mql5.com/ru/docs/files/filereaddouble

Et si j'ai un tableau à deux dimensions, comment puis-je organiser l'énumération.

Si j'utiliseFileReadString, je dois spécifier la longueur de la chaîne, je dois connaître le nombre de chiffres dans la chaîne, pas les cellules ?

Apparemment, je devrais utiliserFileReadNumber, mais c'est trop bizarre.

Lorsque nous avons parlé de l'écriture d'un tableau FileWriteArray(), comment avez-vous essayé de lire ce qui était écrit ?
 
Alexey Viktorov:
Et dites-moi, s'il vous plaît, quand nous avons parlé de l'écriture d'un tableau FileWriteArray(), comment avez-vous essayé de lire ce qui était écrit ?

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

Je comprends ce qui manque, la conversion inverse en un tableau 2D, mais je ne comprends pas comment

Sauf si je l'ai sauvegardé correctement.

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