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

 
Aleksei Stepanenko:
Sergei a plusieurs Expert Advisors qui travaillent là, il y a plusieurs lignes, donc c'est un tableau. Et c'est pourquoi tout est laid. Maxim Kuznetsov a suggéré SQL, c'est la bonne façon pour ces EA de communiquer entre eux.

Mais les lignes sont lues une par une et, d'une manière ou d'une autre, la bonne est sélectionnée. Et alors vous n'avez pas besoin d'un tableau.

J'ai dit ça aussi, mais mql4 ne supporte pas SQLite.

 

Je n'ai pas branché la bibliothèque ? Ou pas là, j'ai oublié.

 
Aleksei Stepanenko:

Je n'ai pas branché la bibliothèque ? Ou pas là, j'ai oublié.

Il semble qu'il ne soit pas possible d'éditer un fichier en même temps, car la version du fichier qui a été enregistrée plus tard est conservée.

Par exemple, le programme A a ouvert le fichier pour l'éditer, au même moment le programme B a fait de même, puis le programme A a effectué les modifications et les a enregistrées en utilisant FileClose, puis le programme B a fait de même, mais lorsque le programme C ouvrira le fichier, il n'affichera pas les modifications effectuées par le programme A, mais seulement les modifications qui ont été implémentées et enregistrées par le programme B, parce que le programme B a enregistré le fichier plus tard que le programme A.

Mais ce n'est pas certain.

Y a-t-il des informations à ce sujet ?

 
Le travail simultané de programmes avec un seul fichier est le pire des maux. Lorsqu'il travaille sur un fichier, un EA doit contrôler l'interdiction pour les autres EA de lire/écrire ce fichier. Utiliser SQL ou lavariable flag-global ou le fichier flag. Sinon, il y aura des erreurs incompréhensibles et difficiles à détecter.
 
Aleksei Stepanenko:
Le travail simultané de programmes avec un seul fichier est le pire des maux. Au moment de travailler avec le fichier, le conseiller expert doit contrôler l'interdiction de lecture/écriture de ce fichier par d'autres conseillers experts. Utiliser lavariable globale SQL ou flag ou le fichier flag. Sinon, il y aura des erreurs incompréhensibles et difficiles à détecter.

Ce n'est pas si mal, les tâches sont différentes, mais il y a certaines particularités dont il faut tenir compte.

Apparemment, les modifications sont sauvegardées exactement au moment de FileClose, et personne n'en est conscient jusque là.

 
C'est vous qui décidez. Le cerveau humain est construit de telle manière que les nouvelles idées sont difficiles à trouver.
 
EfremovSergey:

Il semble qu'il ne soit pas possible d'éditer un fichier en même temps, car la version du fichier qui a été enregistrée plus tard est conservée.

Par exemple, le programme A a ouvert le fichier pour l'éditer, le programme B a fait de même, puis le programme A a apporté des modifications et les a enregistrées à l'aide de FileClose, puis le programme B a fait de même, mais lorsque le programme C ouvrira le fichier, celui-ci ne contiendra pas les modifications apportées par le programme A, mais uniquement les modifications apportées et enregistrées par le programme B, car ce dernier a enregistré le fichier plus tard que le programme A.

Mais ce n'est pas certain.

Y a-t-il des informations à ce sujet ?

Il est difficile de le mettre en place, mais pas impossible. Il suffit de vérifier, avant de sauvegarder, l'heure du dernier changement avec la même heure à l'ouverture. Nous lisons FILE_MODIFY_DATE, puis ouvrons le fichier, apportons des modifications, lisons à nouveau FILE_MODIFY_DATE, comparons avec le précédent et si personne n'a apporté de modifications, fermons le fichier et enregistrons les modifications. Sinon, nous rejetons les modifications... et l'ouvrons à nouveau. Comme ça.

 
EfremovSergey:

Ce n'est pas si mal, les tâches sont différentes, mais il y a certaines particularités dont il faut tenir compte.

Apparemment, les modifications sont sauvegardées au moment de FileClose, et personne n'en a connaissance jusque-là.

Ce n'est pas un fait.

FileFlush

Réinitialise sur disque toutes les données restantes dans le tampon d'E/S du fichier.

void  FileFlush( 
   int  file_handle      // handle файла 
   );
 
Alexey Viktorov:

Difficile à mettre en place, mais pas impossible. Il suffit de vérifier, avant d'écrire, l'heure du dernier changement avec la même heure à l'ouverture. C'est-à-dire lire FILE_MODIFY_DATE puis ouvrir le fichier, faire des modifications, lire à nouveau FILE_MODIFY_DATE, comparer avec le précédent et si personne n'a fait de modifications, fermer le fichier en sauvegardant les modifications. Sinon, nous rejetons les modifications... et l'ouvrons à nouveau. Comme ça.

C'est à peu près la même chose que le drapeau "occupé" (premier arrivé, premier servi), seulement des fois plus compliqué, mais l'idée est intéressante, j'aime bien, merci.

 
Alexey Viktorov:

Ce n'est pas un fait.

FileFlush

Réinitialise sur le disque toutes les données restantes dans le tampon d'E/S du fichier.

Je ne suis pas sûr de ce que cela signifie dans le contexte de l'enregistrement de FileClose.