Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1201
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Escribo todo en un solo archivo. Escribir, y luego leer, varias estructuras en el mismo archivo va bien.
Pero lee la matriz de principio a fin. ¿Cómo se divide en 3 partes? ¿Cómo has escrito una estructura y has conseguido escribir un array en el mismo archivo? Soy autodidacta, no sé mucho, pero el hecho de que sean formatos de datos diferentes, de alguna manera lo sospecho.
Admito que puedes conseguir abrir el archivo para escribir una vez y meter tres matrices, pero no puedes leerlo por partes así.
Pero lee la matriz de principio a fin. ¿Cómo se divide en 3 partes? ¿Cómo se escribe una estructura y se consigue escribir un array en el mismo archivo? Soy autodidacta, no sé mucho, pero el hecho de que sean formatos de datos diferentes, de alguna manera sospecho.
Admito que puedo salirme con la mía abriendo un archivo para escribir una vez y meter tres matrices en él, pero no puedo leerlo tan fácilmente por partes.
Digo yo, si escribes en el mismo fichero sólo 1 estructura y 3 arrays, entonces puedes leerlos desde ahí (suponiendo que para leer los arrays tienes que especificar el tamaño de cada uno). Pero el truco de escribir y luego leer varias secuencias de este tipo no me funcionó. Quizá tenga que mover el puntero, pero ya está tenso...
Ya te dije que si escribes sólo 1 estructura y 3 arrays en un archivo, luego puedes leerlos desde ahí (siempre que tengas que especificar el tamaño de cada uno de ellos para leer los arrays). Pero el truco de escribir y luego leer varias secuencias de este tipo no me funcionó. Tal vez tenga que mover el puntero, pero eso es un poco engorroso...
¿Cómo se tensa? ¿No hay suficiente potencia? ¿Y cómo puedes estar seguro de que la escritura fue exitosa y cómo lo asumes si la lectura falló? Que yo sepa, no se puede mirar un archivo .bin con los ojos.
Artyom, ¿puedes darme un ejemplo? Teniendo en cuenta que el tamaño de las matrices es dinámico.
No, todavía no habrá ejemplos: aún no lo he hecho yo mismo, y cuando lo haga, lo describiré en mis artículos. Y no será pronto. El hecho es que sólo se pueden escribir estructuras POD en un archivo utilizando FileWriteStruct(). Es decir, estructuras simples que no contienen cadenas, matrices dinámicas,funciones virtuales, así como punteros a objetos y funciones.
Y esto significa que hay que inventarlos y probarlos. Pero he escrito la dirección. Hay que pensar en la aplicación.
No, aún no habrá ejemplos: todavía no lo he hecho yo, y cuando lo haga, lo describiré en artículos. Y no será pronto. El hecho es que sólo las estructuras POD pueden escribirse en un archivo utilizando FileWriteStruct(). Es decir, estructuras simples que no contienen cadenas, matrices dinámicas, funciones virtuales, así como punteros a objetos y funciones.
Y esto significa que tenemos que inventarlo y probarlo. Pero he escrito la dirección. Hay que reflexionar sobre la aplicación.
Resulta que, se mire como se mire, la tarea no se puede resolver. Después de todo, el ejemplo de Sergei tiene tres matrices dinámicas en su interior. No importa cómo se disponga la estructura en la estructura, seguirá siendo una matriz dinámica.
Pero si se crea un array de estructuras, el problema se resuelve escribiendo el array. FileWriteArray(). Esto ya ha sido probado y la documentación dice claramente sobre la escritura de un array de estructuras.
Pero lee la matriz de principio a fin. ¿Cómo se divide en 3 partes? ¿Cómo se escribe una estructura y se consigue escribir un array en el mismo archivo? Soy autodidacta, no sé muchas cosas, pero el hecho de que sean formatos de datos diferentes, de alguna manera lo sospecho.
Lo admito, puedes salirte con la tuya, abrir un archivo para escribir una vez y meter tres arrays en él, pero no podrás leerlo por partes así.
En un archivo binario, puede escribir cualquier estructura, matriz, incluso variables individuales, todo en un archivo.
PERO, al leer, debe leer los datos en el mismo orden.
todo funcionará.
no he visto el volcado del archivo al escribir con FileWriteArray() , lo más probable es que el tamaño del array se escriba en los primeros bytes - pero es más fácil hacer un script de prueba, hay una docena de líneas de código ;)
Resulta que, se mire como se mire, el problema es irresoluble. Después de todo, en el ejemplo de Sergei hay tres matrices dinámicas en su interior. No importa cómo se construya la estructura en la estructura, seguirá siendo una matriz dinámica.
Y si creas un array de estructuras, resolverás el problema escribiendo el array. FileWriteArray(). Esto ya ha sido probado y está claramente indicado en la documentación sobre la escritura de un array de estructuras.
Se almacena un array de estructuras, pero... si hubiera cadenas, se pueden empaquetar en un array uchar dentro de la estructura, lo que se hace con éxito. Pero no hay manera de que un array double entre en un array uchar. Además, es dinámico. Y guardando las tres matrices por separado en archivos y luego metiéndolas en la estructura desempaquetada del archivo... No lo he probado. No he pensado en ello y no lo sé.
puede escribir cualquier estructura, matriz, incluso variables individuales en un archivo binario - todo en el mismo archivo
PERO al leer, hay que leer los datos en el mismo orden.
todo funcionará
no he visto el volcado del archivo al escribir con FileWriteArray() , lo más probable es que el tamaño del array se escriba en los primeros bytes - pero es más fácil hacer un script de prueba, hay una docena de líneas de código ;)
No sé dónde empezaste a leer sobre este problema, déjame recordártelo por si acaso: tienes que escribir una estructura que contiene tres arrays dinámicos en un archivo. Entonces tuve una pregunta sobre el archivo que no se lee correctamente.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia
FAQ de principiantes MQL5 MT5 MetaTrader 5
Sergey Tabolin, 2020.03.24 18:02
Le pido a ))))
He intentado hacerlo "a mi manera".
La primera estructura y los 3 arrays se leen bien (siempre que los receptores de los arrays no sean dinámicos, de lo contrario todos los datos escritos después de la estructura se leen en el primer array).
Sin embargo, si hay más entradas, entonces
da un montón de...
Así que estoy pensando: ¿cómo es posible leer la estructura y tres matrices de un archivo, que no se sabe cómo fue escrito.
Por eso he dicho que soy autodidacta y no sé mucho, pero no se puede leer por partes.
Y entiendo que hay opciones para añadir al archivo .bin todo, pero para leerlo hay que saber qué se escribe y en qué orden. Y es posible que no por medio de mql.
No entiendo esto en absoluto...
¿Qué tiene de malo?
Entonces pienso: cómo es posible leer una estructura y tres arrays de un archivo, que no se sabe cómo fue escrito.
eso es lo que escribo, es más fácil de comprobar, en 10 minutos.... comprobado, FileWriteArray() no escribe el tamaño de la matriz en la cabecera o el primer byte, significa que debes escribir estos valores tú mismo
2020.03.25 10:18:36.058 tst (EURUSD,H1) 1. d_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 3.14159 3.14159 3.14159 3.14159
2020.03.25 10:18:36.058 tst (EURUSD,H1) 2. i_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 1234567890 1234567890
2020.03.25 10:18:36.058 tst (EURUSD,H1) 2. c_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 127 127 127
2020.03.25 10:18:36.058 tst (EURUSD,H1) mstruct.a = 666 , mstruct.b = 123.123000
es decir, si las dimensiones de las matrices son dinámicas, significa que escribimos las dimensiones de la propia matriz al escribir, y al leer, leemos el valor del tamaño de la matriz desde el archivo y establecemos las dimensiones de las matrices de la estructura
en mi ejemplo 2 estructuras - una fue inicializada y escrita, la segunda fue leída, inicializada desde los datos del archivo