Écriture dans le fichier sur une nouvelle ligne - page 3

 
Alexey Viktorov:

Et le concept n'est pour vous qu'en surface.........

Je voulais dire que la suggestion (concept) "d'expérimenter par soi-même" n'a pas besoin d'être exprimée, elle est claire comme elle est. Igor j'ai parfaitement compris et j'ai moi-même pensé à cette option, pour la raison que c'est la plus simple, mais pour moi imho elle n'est pas très adaptée, pour les circonstances décrites ci-dessus.

 
EfremovSergey:

Voici le problème : il y a 10 programmes qui écrivent dans le fichier et 10 autres qui le lisent, vous ne voulez pas que chaque programme de lecture traite toutes les données accumulées pour tout le temps.

Et dans ce cas, il est préférable d'abandonner complètement le fichier et de travailler avec une base de données SQLite. C'est très similaire au travail avec des fichiers, que vous pouvez également créer dans un dossier partagé, mais le traitement, la recherche et la suppression de la chaîne sont beaucoup plus faciles.

 

Sergey, si vous n'avez pas besoin de regarder ce fichier avec vos yeux, alors écrivez-y un tableau de vos données en une seule fois

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

puis retirer le tableau du fichier à tout moment

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

Et travaillez avec le tableau comme vous le souhaitez. Supprimez le dernier élément, ajoutez-en d'autres.

 
Alexey Viktorov:

Dans ce cas, il est préférable d'abandonner complètement le fichier et de travailler avec une base de données SQLite. C'est très similaire au travail avec des fichiers, que vous pouvez également créer dans un dossier partagé, mais le traitement, la recherche et la suppression des rangées sont beaucoup plus faciles.

Est-ce que MQL4 permet de travailler avec SQLite? N'est-ce pas seulement le format TXT et CSV ?

L'accès au fichier se fait par un lien symbolique, peu importe où se trouve le fichier, dans quel dossier.

 
Aleksei Stepanenko:

Sergey, si vous n'avez pas besoin de regarder ce fichier avec vos yeux, alors écrivez-y un tableau de vos données en une seule fois

puis retirer le tableau du fichier à tout moment

Et travaillez avec le tableau comme vous le souhaitez. Supprimez le dernier élément, ajoutez-en un autre.

Alors, quelle est la différence, le tableau est écrit dans le fichier ligne par ligne dans tous les cas, ou dans ce cas, il est possible de supprimer au moins le dernier ou le premier élément, array=string ?

 

Je ne comprends pas bien la question. Vous disposez d'un tableau de données sur lequel vous pouvez effectuer facilement toutes sortes de manipulations. Et une simple écriture et lecture du fichier en quatre lignes de code. C'est l'avantage. Pourquoi réfléchir à la manière dont un tableau est écrit dans un fichier?

Vous effectuez les modifications nécessaires dans le tableau, vous téléchargez le tableau modifié dans un fichier et c'est tout.

 
Aleksei Stepanenko:

Je ne comprends pas bien la question. Vous disposez d'un tableau de données sur lequel vous pouvez effectuer facilement toutes sortes de manipulations. Et une simple écriture et lecture du fichier en quatre lignes de code. C'est l'avantage. Pourquoi réfléchir à la manière dont un tableau est écrit dans un fichier?

Vous effectuez les modifications nécessaires dans le tableau, vous téléchargez le tableau modifié dans un fichier et c'est tout.

La difficulté réside dans le fait que 20 applications devront traiter un seul et même tableau à la fois, et qu'il est impossible de déterminer quelle version éditée particulière du tableau est pertinente à ce moment précis.

Supposons que le premier conseiller expert ait édité le tableau et l'ait publié, et qu'une autre version du tableau ait été écrite par-dessus, sans tenir compte de la précédente, et c'est tout... confusion....

Si, par exemple, chaque conseiller expert pouvait supprimer la ligne correspondante après qu'elle a été lue, alors tout irait bien - personne ne dérange personne et le fichier ne sera pas surchargé de données redondantes, mais chaque fois que le tableau édité est écrit dans une course, alors il n'est pas clair comment synchroniser l'actualité des données de chacun des 20 conseillers experts.

 

La gestion de l'accès de plusieurs EA à un même fichier est une chose à laquelle vous devez penser.

Voici quelque chose à quoi vous pouvez réfléchir :

1. Pour empêcher deux EA de travailler sur le même fichier en même temps, créez un autre fichier indicateur. Lorsque ce fichier n'existe pas, le conseiller expert a le droit d 'ouvrir le fichier avec les données, avant de créer un indicateur de fichier, montrant aux autres qu'il est occupé jusqu'à présent. Après la lecture-écriture, l'EA supprime le drapeau de fichier. Les données sont maintenant libres pour que tout autre EA puisse travailler dessus.

2. Vous pouvez créer des variables pour recueillir des informations sur tout conseiller expert qui a utilisé les données de ce tableau. Inscrivez ces variables dans le même fichier.

3. Au lieu du tableau habituel, créez un tableau de structures, qui comprend différents types de données et est très visuel.

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

La gestion de plusieurs EA accédant au même fichier est une chose à laquelle vous devez penser.


Lorsque plusieurs conseillers experts doivent écrire, ajouter, sélectionner et lire un ensemble de données, les bases de données sont impliquées bon gré mal gré.

Vous pouvez utiliser des"variables globales" et des drapeaux, mais pourquoi pas ?

C'est un truc de SGBD. Différents, relationnels, NoSQL et autres, mais c'est le leur. Et là, dans leur mécanique, tout est peaufiné pendant des années et des décennies. Tous les locs-flags-semaphores-mutexes.
Essayer de le reproduire est une folle perte de temps.

 
Exactement !