Escribir en el archivo en una nueva línea - página 3

 
Alexey Viktorov:

Y el concepto es sólo para ti en la superficie.........

Me refería a que la sugerencia (concepto) de "experimentar por su cuenta" no necesita ser expresada, es clara tal y como es. Igor entiendo perfectamente y yo mismo pensé en esta opción, por la razón de que es la más sencilla, pero para mí imho no es muy adecuado, para las circunstancias descritas anteriormente.

 
EfremovSergey:

Aquí está el truco: hay 10 programas que escriben en el archivo y otros 10 que leen de él, no quieres que cada programa de lectura procese todos los datos acumulados durante todo el tiempo.

Y en este caso, es mejor abandonar el archivo por completo y trabajar con una base de datos SQLite. Esto es muy similar a trabajar con archivos, también se puede crear en una carpeta compartida, pero el procesamiento, la búsqueda y la eliminación de la cadena es mucho más fácil.

 

Sergey, si no necesitas mirar este archivo con los ojos, entonces escribe un array de tus datos en él de una vez

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

luego sacar la matriz del archivo en cualquier momento

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

Y trabaja con la matriz como quieras. Borrar el último elemento, añadir más.

 
Alexey Viktorov:

Y en este caso, es mejor abandonar el archivo por completo y trabajar con una base de datos SQLite. Esto es muy similar a trabajar con archivos, también se puede crear en una carpeta compartida, pero el procesamiento, la búsqueda y la eliminación de las filas es mucho más fácil.

¿Admite MQL4 trabajar con SQLite? ¿No es sólo el formato TXT y CSV?

El acceso al archivo se realiza a través de un enlace simbólico, no importa dónde se encuentre el archivo, en qué carpeta.

 
Aleksei Stepanenko:

Sergey, si no necesitas mirar este archivo con los ojos, entonces escribe un array de tus datos en él de una vez

luego sacar la matriz del archivo en cualquier momento

Y trabaja con la matriz como quieras. Borra el último elemento y añade otro.

Entonces, ¿cuál es la diferencia, el array se escribe en el archivo línea por línea en cualquier caso, o en este caso, es posible eliminar al menos el último o primer elemento, array=cadena?

 

No entiendo bien la pregunta. Tienes una matriz de datos sobre la que puedes hacer cualquier tipo de manipulación con facilidad. Y una simple escritura y lectura del archivo en cuatro líneas de código. Esa es la ventaja. ¿Por qué pensar en cómo se escribe una matriz en un archivo?

Haces los cambios necesarios en la matriz, subes la matriz modificada a un archivo y ya está.

 
Aleksei Stepanenko:

No entiendo bien la pregunta. Tienes una matriz de datos sobre la que puedes hacer cualquier tipo de manipulación con facilidad. Y una simple escritura y lectura del archivo en cuatro líneas de código. Esa es la ventaja. ¿Por qué pensar en cómo se escribe una matriz en un archivo?

Haces los cambios necesarios en la matriz, subes la matriz modificada a un archivo y ya está.

La dificultad aquí es que 20 aplicaciones tendrán que manejar un mismo array a la vez, y es imposible determinar qué versión editada del array es relevante en el momento actual.

Supongamos que el primer Asesor Experto ha editado un array y lo ha publicado, y sobre él se ha escrito otra versión del array, sin tener en cuenta la anterior, y eso es... confusión...

Si, por ejemplo, cada Asesor Experto pudiera borrar la línea relacionada después de haberla leído, entonces todo funcionaría - nadie molesta a nadie y el archivo no se sobrecargará con datos redundantes, pero cada vez que la matriz editada se escribe en una carrera, entonces no está claro cómo sincronizar la actualidad de los datos de cada uno de los 20 Asesores Expertos.

 

La gestión del acceso de varios EAs al mismo archivo es algo en lo que hay que pensar.

Aquí hay algo en lo que puedes pensar:

1. Para evitar que dos EAs trabajen en el mismo archivo al mismo tiempo, cree otro archivo de bandera. Cuando este archivo no existe, el Asesor Experto tiene el derecho de abrir el archivo con los datos, antes de que crear un archivo-flag, mostrando a los demás que está ocupado hasta el momento. Después de la lectura-escritura, el EA borra el archivo-flag. Los datos están ahora libres para que cualquier otro EA pueda trabajar con ellos.

2. Se pueden hacer variables para recoger información sobre cualquier Asesor Experto que haya utilizado los datos de esta matriz. Escriba estas variables en el mismo archivo.

3. En lugar del habitual array, crea un array de estructuras, que incluye diferentes tipos de datos y es muy visual.

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

La gestión de múltiples EAs que acceden al mismo archivo es algo en lo que hay que pensar.


Cuando varios Asesores Expertos necesitan escribir+añadir+seleccionar+leer un conjunto de datos, entonces las bases de datos están involucradas a voluntad.

Puedes utilizar"variables globales" y banderas, pero ¿por qué no?

Eso es una cosa de DBMS. Diferentes, relacionales, NoSQL y otros, pero es el suyo. Y allí en su mecánica todo se afina durante años y décadas. Todos los locs-flags-semaphores-mutexes.
Tratar de replicarlo es una pérdida de tiempo salvaje.

 
¡Exactamente!