Discussão do artigo "Manipulação de Arquivos ZIP em Linguagem MQL5 Pura"

 

Novo artigo Manipulação de Arquivos ZIP em Linguagem MQL5 Pura foi publicado:

A linguagem MQL5 se mantém em evolução e novos recursos para trabalhar com dados estão constantemente sendo adicionados. Devido as inovações recentes, se tornou possível manipular arquivos ZIP usando ferramentas MQL5 nativas, sem envolver bibliotecas DLL de terceiros. Este artigo foca em como isso é realizado e implementa a classe CZip, que é uma ferramenta universal para ler, criar e modificar arquivos ZIP, como um exemplo.

O formato ZIP foi criado por Phil Katz em 1989 e foi implementado pela primeira vez no programa PKZIP para MS-DOS, lançado pela empresa PKWARE que Katz fundou. Este formato usa com mais freqüência o algoritmo de compactação de dados DEFLATE . Os programas mais comuns que trabalham no Windows com este formato são WinZip e WinRAR.

É importante entender que o formato do arquivo ZIP foi desenvolvido ao longo do tempo e tem várias versões. Para criar uma classe que funcione com um arquivo ZIP, contamos com a especificação do formato oficial da versão 6.3.4, encontrada no site da empresa PKWARE:  https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT. Esta é a especificação de formato mais recente datada de 01 de outubro de 2014, que é extensiva e inclui descrições de inúmeras nuances.

Neste artigo, somos guiados pelo princípio do menor esforço e iremos criar uma ferramenta que utilizará apenas os dados mais necessários para a extração e criação de novos arquivos com sucesso. Isto significa que a operação com arquivos ZIP será limitado até um certo ponto - a compatibilidade dos formatos não é garantida, portanto não existe necessidade de mencionar a completa "onívoria" de arquivos. Existe a possibilidade de alguns arquivos ZIP criados por aplicativos de terceiros não poderem ser extraídos através do instrumento proposto.

Cada arquivo ZIP é um arquivo binário que contém uma seqüência ordenada de bytes. Por outro lado, cada arquivo do ZIP tem um nome, atributos (tais como a data de modificação do arquivo) e outras propriedades, que estamos acostumados a ver em sistemas de arquivos de qualquer sistema operacional . Portanto, além dos dados compactados, cada armazenamento de arquivo ZIP possui o nome de um arquivo comprimido, seus atributos e outras informações do serviço. A informação do serviço é colocada de uma forma muito específica e tem uma estrutura padrão. Por exemplo, se um arquivo contém dois arquivos(File#1 e File#2), então terá o seguinte esquema:

Fig. 1. Representação esquemática de um arquivo ZIP que contém dois arquivos: File#1 e File#2

Autor: Vasiliy Sokolov

 

Alguém testou o código? Ele funciona no MT4?

 
A impressionante compactação de dados históricos, juntamente com a ideia de aplicá-la ao conteúdo da RAM discutida acima, sugere que há esperança de uma redução radical nos recursos de memória exigidos pelo terminal MT5. Será que isso vai acontecer?
 
Vladimir Pastushak:

Alguém testou o código? Ele funciona no MT4?

Ele não apenas funciona, mas é usado ao máximo em projetos como o MetaCOT 2.
 
Vladimir:
A impressionante compactação de dados históricos, juntamente com a ideia de aplicá-la ao conteúdo da RAM discutida acima, sugere que há esperança de uma redução radical nos recursos de memória exigidos pelo terminal MT5. Será que isso vai acontecer?
O MT5 em si requer muito poucos recursos. Mas ao solicitar cotações, a memória é usada dependendo da variável "max bars in history". Não sei se esse bug que falhou foi corrigido, mas eles prometeram removê-lo.
 

Alguma coisa está quebrada, isso é o que acontece ao compilar.

O ZipHeader.mqh tem um erro.

 

O notório elenco de estruturas é o palavrão. Mantenha a versão corrigida no anexo.

Arquivos anexados:
Zip.zip  11 kb
 
Vasiliy Sokolov:

O notório elenco de estruturas é o palavrão. Aqui está a versão corrigida no anexo.

Ela deve funcionar no MT4? Tenho esta situação.
'm_array' - structures containing objects are not allowed       Dictionary.mqh  252     25
cannot cast 'DoubleValue' to 'ULongValue'       Dictionary.mqh  209     14
 
Stanislav Korotky:
Ele deve funcionar no MT4? Tenho essa situação.

A #propriedade #strist ajuda?

 

A nova versão acrescenta um mecanismo adicional para extrair estruturas de dados do arquivo se os campos de estrutura não estiverem preenchidos. (Percebeu-se que os produtos da Microsoft cospem no padrão de uma torre alta e simplesmente não preenchem campos como "tamanho do arquivo"). A nova versão agora funciona com esses arquivos problemáticos.

Já adicionei a nova versão do arquivo ao artigo. Parece que ela já foi atualizada, portanto, você pode baixar o anexo do artigo.

 
Stanislav Korotky:
Ele deve funcionar no MT4? Tenho a mesma situação.

Agora, examinei cuidadosamente seu erro - a mesma situação com estruturas de fundição, mas em um contêiner diferente - CDictionary. Substitua o Include\Dictionary.mqh pela variante anexada abaixo.

E, sim, tudo funciona bem no MT4, e digo mais: o CZip é um cavalo de batalha em meus projetos no MT4.

Arquivos anexados:
Dictionary.mqh  38 kb