Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1118

 
  FileReadArray(file_handle,arr);

Le rogamos que nos informe sobre la posible evolución de la situación.

Tengo un array[100], también he guardado un archivo binario de tamaño [1000], cómo devolver el array de los últimos 100 valores del archivo binario. ¿Hay algo universal? Llevo 12 horas trabajando de nuevo en esto y nada.

 
Top2n:
  FileReadArray(file_handle,arr);

Le rogamos que nos informe sobre la posible evolución de la situación.

Tengo un array[100], también he guardado un archivo binario de tamaño [1000], cómo devolver el array de los últimos 100 valores del archivo binario. ¿Hay algo universal? Llevo 12 horas trabajando en esto y nada.

Si no recuerdo mal, estaba escrito en mql4, que si count = WHOLE_ARRAY o el valor excede el número de elementos del array, entonces el array entero se escribe al final. Y no decía nada de ningún margen. Significa que no podemos hablar de 1000.

Para comprobarlo, cuenta cuántos valores se escriben y el tamaño del archivo.

 
Alexey Viktorov:

Si no recuerdo mal, en mql4 estaba escrito que si count = WHOLE_ARRAY o el valor supera el número de elementos del array, se escribe todo el array hasta el final. Y no decía nada de ningún margen. Por lo tanto, puede quedar absolutamente descartado si no hay un margen de 1000 mil puntos.

Para comprobarlo, calcule cuántos valores se escriben y el tamaño del archivo resultante.

No quiero decir que después de escribir el array en el binario, aparezcan nuevos datos, y los siga escribiendo en el binario a través de un nuevo array dimensionado (= la dimensión de la columna del array primario), cada vez hasta el final del archivo, para una nueva columna j

entonces tenemos que eliminar los datos del binario iguales en número al índice del array original, que fue transferido al binario en la primera integración. Sin embargo, los últimos datos se incluirán en esta matriz limitada, porque el binario es mayor que la matriz primaria, ya que se han añadido filas secundarias. Las filas secundarias deben ir en la matriz de lectura, y las primeras filas en binario deben estar fuera del área.

 
Top2n:

No me refiero a que después de escribir el array en el binario, aparezcan nuevos datos al cabo de un momento, que sigo escribiendo en el binario a través de un nuevo array dimensionado (= dimensión de la columna del array primario), cada vez al final del fichero, para una nueva columna j

entonces tenemos que eliminar los datos del binario iguales en número al índice del array original, que fue transferido al binario en la primera integración. Sin embargo, los últimos datos deben ser eliminados de forma que se incluyan en este array limitado, ya que el binario es mayor que el array primario debido a la adición de filas secundarias.

Entonces no es necesario asignar una dimensión al array antes de la lectura. Si no es el primer dato que se necesita, es necesario calcular el tamaño en bytes y desplazar la posición de inicio de la lectura en la cantidad adecuada.
 
Alexey Viktorov:
Entonces no es necesario asignar un tamaño al array antes de la lectura. Si no es el primer dato que se necesita, entonces calcula el tamaño en bytes y desplaza la posición de inicio de la lectura en la cantidad adecuada.

Esa es la cuestión de cómo calcular los bytes

FileWriteInteger(h,s1,INT_VALUE); //ножно ли перед записью записывать размера массива?
s1=FileReadInteger(h,INT_VALUE); //ножно ли перед восстановлением считываем размер массива?

может как то через это sizeof
 
Top2n:

Esta es la cuestión de cómo calcular los bytes

FileWriteInteger(h,s1,INT_VALUE); //ножно ли перед записью записывать размера массива?
s1=FileReadInteger(h,INT_VALUE); //ножно ли перед восстановлением считываем размер массива?

может как то через это sizeof

Si los datos son de tipo doble, divida el tamaño del archivo por el número de bytes que ocupa el número de tipo doble, es decir, por 8.

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

Si los datos son dobles, se divide el tamaño del archivo por el número de bytes que ocupa el número doble, es decir, por 8.

¿Es deFileFindFirst?

o simplemente escanear cada nueva línea en bytes

Короче при записи начал суммировать вторичный массив в байтах, каждая запись плюсуется с предыдущей
file_size=+FileSize(handle); // чтобы выяснить индекс от которого открывать

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
equivocado
 
Top2n:
ConFileFindFirst?
Tienes el nombre del archivo y su mango.
 
Top2n:

¿A través deFileFindFirst?

O simplemente resumir cada nueva línea en bytes

Короче при записи начал суммировать вторичный массив в байтах, каждая запись плюсуется с предыдущей
file_size=+FileSize(handle); // чтобы выяснить индекс от которого открывать

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
no está bien.

No deberías haber corregido tu post después de responderlo...

No es así. Antes de leer un array, defina su tamaño file_size = FileSize(handle); y divida por la memoria ocupada por el tipo de datos, es decir, para double por 8. Se obtiene el número de números en el archivo. Si el array es bidimensional, el número de registros en el archivo será dos veces menor. Y se obtiene cuántos bytes se deben desplazar para leer de la línea deseada.

 
Alexey Viktorov:

Deberías haber corregido tu post después de responder a él...

No es así. Antes de leer un array, defina su tamaño file_size = FileSize(handle); y divida por la memoria ocupada por el tipo de datos, es decir, para double por 8. Se obtiene el número de números en el archivo. Si el array es bidimensional, el número de registros en el archivo será dos veces menor. Y se obtiene cuántos bytes se deben desplazar para leer de la línea deseada.

Acabé dividiendo por 8000 para que los valores del array cupieran en sus índices.
Razón de la queja: