Scrivere nel file su una nuova linea - pagina 6

 
Aleksei Stepanenko:
Sergei ha diversi Expert Advisors che lavorano lì, ci sono diverse righe, quindi è un array. Ed è per questo che tutto sembra brutto. Maxim Kuznetsov ha suggerito SQL, questo è il modo giusto per questi EAs di comunicare tra loro.

Ma le linee vengono lette una per una e in qualche modo viene selezionata quella giusta. E poi non hai bisogno di un array.

Ho detto anche questo, ma mql4 non supporta SQLite

 

Non ho collegato la libreria? O non c'è, l'ho dimenticato.

 
Aleksei Stepanenko:

Non ho collegato la libreria? O non c'è, l'ho dimenticato.

Sembra che non sia possibile modificare un file insieme allo stesso tempo, perché viene salvata la versione del file che è stata salvata dopo.

Per esempio, il programma A ha aperto il file per la modifica, allo stesso tempo il programma B ha fatto lo stesso, poi il programma A ha fatto le modifiche e le ha salvate usando FileClose, poi il programma B ha fatto lo stesso, ma quando il programma C apre il file, non mostrerà le modifiche fatte dal programma A, ma solo le modifiche che sono state implementate e salvate dal programma B, perché il programma B ha salvato il file dopo il programma A.

Ma questo non è certo.

C'è qualche informazione su questo?

 
Il lavoro simultaneo di programmi con un file è il male peggiore. Mentre lavora su un file, un EA deve controllare il divieto di altri EA di leggere/scrivere quel file. Usa SQL o lavariabile flag-global o il flag-file. Altrimenti ci saranno errori incomprensibili e difficili da individuare.
 
Aleksei Stepanenko:
Il lavoro simultaneo di programmi con un file è il male peggiore. Al momento di lavorare con il file, l'Expert Advisor dovrebbe controllare il divieto di lettura/scrittura di questo file da parte di altri Expert Advisor. Usa SQL o lavariabile globale flag o il file flag. Altrimenti ci saranno errori incomprensibili e difficili da individuare.

Non è così male, i compiti sono diversi, ma ci sono alcune peculiarità che devono essere prese in considerazione.

Apparentemente le modifiche vengono salvate esattamente al momento di FileClose, e nessuno ne è a conoscenza fino ad allora.

 
Dipende da voi. Il cervello umano è costruito in modo tale che è difficile trovare nuove idee.
 
EfremovSergey:

Sembra che non sia possibile modificare un file insieme allo stesso tempo, perché viene salvata la versione del file che è stata salvata dopo.

Per esempio, il programma A ha aperto il file per la modifica, allo stesso tempo il programma B ha fatto lo stesso, poi il programma A ha fatto delle modifiche e le ha salvate usando FileClose, poi il programma B ha fatto lo stesso, ma quando il programma C apre il file, il file non conterrà le modifiche fatte dal programma A, ma solo le modifiche che il programma B ha fatto e salvato, perché il programma B ha salvato il file dopo il programma A.

Ma questo non è certo.

C'è qualche informazione su questo?

È difficile da impostare, ma non impossibile. È sufficiente controllare, prima di salvare, il tempo dell'ultimo cambio con lo stesso tempo all'apertura. Leggiamo FILE_MODIFY_DATE, poi apriamo il file, facciamo delle modifiche, leggiamo di nuovo FILE_MODIFY_DATE, confrontiamo con il precedente e se nessuno ha fatto modifiche, chiudiamo il file e salviamo le modifiche. Altrimenti scartiamo le modifiche... e lo riapriamo. Come questo.

 
EfremovSergey:

Non è così male, i compiti sono diversi, ma ci sono alcune peculiarità che devono essere prese in considerazione.

Apparentemente, le modifiche vengono salvate al momento di FileClose, e nessuno ne è a conoscenza fino ad allora.

Non è un fatto.

FileFlush

Ripristina su disco tutti i dati rimasti nel buffer di I/O del file.

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

Difficile da impostare, ma non impossibile. È sufficiente controllare, prima di scrivere, l'ora dell'ultima modifica con la stessa ora quando si apre. Cioè leggere FILE_MODIFY_DATE poi aprire il file, fare delle modifiche, leggere di nuovo FILE_MODIFY_DATE confrontare con il precedente e se nessuno ha fatto modifiche, chiudere il file salvando le modifiche. Altrimenti scartiamo le modifiche... e lo riapriamo. Come questo.

È più o meno la stessa cosa della bandiera "occupata" (primo arrivato primo servito), solo le volte più complicate, ma l'idea è interessante, mi piace, grazie.

 
Alexey Viktorov:

Non è un fatto.

FileFlush

Ripristina su disco qualsiasi dato rimanente nel buffer di I/O del file.

Non sono sicuro di cosa significhi questo nel contesto del salvataggio di FileClose.