Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1201
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Escrevo tudo num só ficheiro. Escrever, e depois ler, várias estruturas para o mesmo ficheiro corre bem.
Mas lê a matriz do princípio ao fim. Como é que se divide em 3 partes? Como se escreveu uma estrutura e se conseguiu escrever uma matriz para o mesmo ficheiro? Sou autodidacta, não sei muito, mas o facto de serem formatos de dados diferentes, de alguma forma suspeito.
Admito que se consegue abrir o ficheiro para escrever uma vez e enfiar três arrays nele, mas não se pode simplesmente lê-lo em partes como essa.
Mas lê a matriz do princípio ao fim. Como é que se divide em 3 partes? Como se escreve uma estrutura e se consegue escrever uma matriz para o mesmo ficheiro? Sou autodidacta, não sei muito, mas o facto de que são formatos de dados diferentes, de alguma forma suspeito.
Admito que posso escapar-me abrindo um ficheiro para escrever uma vez e enfiar-lhe três matrizes, mas não consigo lê-lo tão facilmente em partes.
Digo, se escrever no mesmo ficheiro apenas 1 estrutura e 3 matrizes, então pode lê-las a partir daí (assumindo que para ler as matrizes tem de especificar o tamanho de cada uma). Mas o truque de escrever e depois ler várias dessas sequências não funcionou para mim. Talvez precise de mover o ponteiro, mas já está tenso...
Eu disse-lhe, se escrever apenas 1 estrutura e 3 matrizes num ficheiro, então pode lê-las mais tarde (desde que tenha de especificar o tamanho de cada uma delas para ler as matrizes). Mas o truque de escrever e depois ler várias dessas sequências não funcionou para mim. Talvez precise de mover o ponteiro, mas isso é um pouco incómodo...
Como é que está tenso? Não tem cavalos de potência suficiente? E como se pode ter a certeza de que a escrita foi bem sucedida e como se pode supor isso se a leitura falhou? Tanto quanto sei, não se pode olhar para um ficheiro .bin com os olhos.
Artyom, pode dar-me um exemplo? Tendo em conta que o tamanho das matrizes é dinâmico.
Não, ainda não haverá exemplos - eu próprio ainda não o fiz, e quando o fizer, irei descrevê-lo nos meus artigos. E não será em breve. O facto é que só se podem escrever estruturas POD num ficheiro usando FileWriteStruct(). Trata-se de estruturas simples que não contêm cordas, arrays dinâmicos,funções virtuais, bem como apontadores para objectos e funções.
E isto significa que tem de os inventar e testar. Mas eu escrevi a direcção. A implementação precisa de ser pensada.
Não, ainda não haverá exemplos - eu próprio ainda não o fiz, e quando o fizer, irei descrevê-lo nos artigos. E não será em breve. O facto é que apenas as estruturas POD podem ser escritas em ficheiro usando FileWriteStruct(). Ou seja, estruturas simples que não contêm cordas, arrays dinâmicos, funções virtuais, bem como apontadores para objectos e funções.
E isto significa que temos de o inventar e testar. Mas eu escrevi a direcção. A implementação deve ser pensada.
Acontece que não importa como se olha para ela, a tarefa não pode ser resolvida. Afinal, o exemplo de Sergei tem três matrizes dinâmicas no seu interior. Não importa como a estrutura está disposta na estrutura, ela continuará a ser uma matriz dinâmica.
Mas se se criar um conjunto de estruturas, o problema é resolvido escrevendo o conjunto. FileWriteArray(). Isto já foi testado e a documentação afirma claramente sobre a escrita de um conjunto de estruturas.
Mas lê a matriz do princípio ao fim. Como é que se divide em 3 partes? Como se escreve uma estrutura e se consegue escrever uma matriz para o mesmo ficheiro? Sou autodidacta, não sei muitas coisas, mas o facto de que são formatos de dados diferentes, de alguma forma suspeito.
Admito que se pode escapar, abrindo um ficheiro para escrever uma vez e enfiando nele três arrays, mas não será possível lê-lo em partes como essa.
Num ficheiro binário, pode escrever quaisquer estruturas, arrays, mesmo variáveis únicas, tudo num só ficheiro.
MAS, ao ler, deve ler os dados na mesma ordem.
tudo irá funcionar.
não tenham visto o arquivo despejado, ao escrever com FileWriteArray() , muito provavelmente, o tamanho da matriz será escrito nos primeiros bytes - mas é mais fácil fazer um roteiro de teste, há uma dúzia de linhas de código ;)
Acontece que, independentemente da forma como se olhe para ele, o problema é insolúvel. Afinal de contas, no exemplo de Sergei existem três matrizes dinâmicas no interior. Não importa como se constrói a estrutura na estrutura, esta continuará a ser uma matriz dinâmica.
E se criar um conjunto de estruturas, irá resolver o problema escrevendo o conjunto. FileWriteArray(). Isto já foi testado e está claramente declarado na documentação sobre a escrita de uma série de estruturas.
Uma série de estruturas é armazenada, mas... se houvesse cordas, elas podem ser embaladas em uchar array dentro da estrutura, o que é feito com sucesso. Mas não há forma de o dobro da matriz poder caber na matriz uchar. Além disso, é dinâmico. E salvar as três arrays separadamente em ficheiros e depois empurrá-los para a estrutura desempacotada do ficheiro... Ainda não o experimentei. Ainda não pensei no assunto e não sei.
pode escrever quaisquer estruturas, matrizes, mesmo variáveis individuais num ficheiro binário - tudo no mesmo ficheiro
MAS ao ler, tem de ler os dados na mesma ordem.
tudo vai funcionar
não tenham visto o arquivo despejado quando escrevendo com FileWriteArray() , muito provavelmente, o tamanho da matriz será escrito nos primeiros bytes - mas é mais fácil fazer um roteiro de teste, há uma dúzia de linhas de código ;)
Não sei onde começou a ler sobre este problema, deixe-me lembrar-lhe apenas no caso de: tem de escrever uma estrutura contendo três matrizes dinâmicas num ficheiro. Depois tive uma pergunta sobre o ficheiro não ter sido lido correctamente.
Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia
FAQ de Iniciantes MQL5 MT5 MetaTrader 5
Sergey Tabolin, 2020.03.24 18:02
Estou a perguntar ))))
Tentei fazê-lo "à minha maneira".
A primeira estrutura e 3 matrizes lêem bem (desde que os receptores das matrizes não sejam dinâmicos, caso contrário todos os dados escritos após a estrutura serem lidos na primeira matriz).
No entanto, se houver mais entradas, então
dá um inferno de muita coisa.
Portanto, estou a pensar: como é possível ler a estrutura e três matrizes de um ficheiro, que não se sabe como foi escrito.
É por isso que disse que sou autodidacta e não sei muito, mas não se pode ler em partes.
E compreendo que existem opções para adicionar ao ficheiro .bin tudo, mas para o ler é necessário saber o que está escrito em que ordem. E é possível que não por meio de mql.
Não percebo nada disto...
O que há de errado?
Portanto, estou a pensar: como é possível ler uma estrutura e três matrizes de um ficheiro, que não se sabe como foi escrito.
é o que estou a escrever, é mais fácil de verificar, dentro de 10 minutos.... verificado, FileWriteArray() não escreve o tamanho do array no cabeçalho ou no primeiro byte, significa que deve escrever estes valores você mesmo
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 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 127 127 127
2020.03.25 10:18:36.058 tst (EURUSD,H1) mstruct.a = 666 , mstruct.b = 123.123000
ou seja, se as dimensões do array são dinâmicas, significa que nós próprios escrevemos as dimensões do array ao escrever, e ao ler, lemos o valor do tamanho do array a partir do ficheiro e definimos as dimensões dos array da estrutura
no meu exemplo 2 estruturas - uma foi rubricada e escrita, a segunda foi lida, rubricada a partir de dados do ficheiro