Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Vasili!
Senden bir cevap beklemiyordum. (MQ'nun yapı 1100'deki değişiklikleri uygulamayı başardığını bilmiyorum)
kod çözücü:
//+------------------------------------------------------------------+ //| Zip_decoder.mq5 | //| Copyright 2015, Mikalas | //| https://www.mql5.com | //+------------------------------------------------------------------+ // #define uint_size 4 #define hdr_size 2 #define descr_size 12 // struct ZIP_HEADER { uint sign; ushort a_version; ushort bit_flag; ushort comp_method; ushort last_mod_time; ushort last_mod_date; uint crc_32; uint pack_size; uint unpack_size; ushort fn_len; ushort extr_field_len; }; //--- struct ZIP_ENTRYES { uint file_count; string zip_fnames[]; ulong zip_offsets[]; uint pack_size[]; uint unpack_size[]; }; struct DATA_DESCRIPTOR { uint crc_32; uint pack_size; uint unpack_size; }; // DATA_DESCRIPTOR data_descriptor; ZIP_HEADER zip_header; ZIP_ENTRYES zip_entryes; uchar key[] = {1,0,0,0}; bool f_found; uchar f_name[]; bool is_descr; //+------------------------------------------------------------------+ //| Get entryes in ZIP file | //+------------------------------------------------------------------+ uint GetEntryesZip( int handle, ZIP_ENTRYES &f_entr ) { //--- Check valid file handle if ( handle != INVALID_HANDLE ) { f_entr.file_count = 0; //--- ulong file_size = FileSize( handle ); if ( file_size > 0 ) { //---Set file position to "0" FileSeek( handle, 0, SEEK_SET ); //---Build table while ( FileTell( handle ) < ( file_size - uint_size ) ) { zip_header.sign = FileReadInteger( handle, uint_size ); //--- if ( zip_header.sign == 0x04034b50 ) { FileSeek( handle, -4, SEEK_CUR ); f_entr.file_count++; FileReadStruct( handle, zip_header ); //---Check needed version if ( ( zip_header.a_version != 0x0014 ) && ( f_entr.file_count == 1 ) ) { Print( "Unsupported version!" ); f_entr.file_count = 0; return( f_entr.file_count ); } if ( ( zip_header.extr_field_len != 0 ) && ( f_entr.file_count == 1 ) ) { Print( "File compressed using ZIP64 format!" ); f_entr.file_count = 0; return( f_entr.file_count ); } //---Resize out data ArrayResize( f_entr.pack_size, f_entr.file_count ); ArrayResize( f_entr.unpack_size, f_entr.file_count ); ArrayResize( f_entr.zip_fnames, f_entr.file_count ); ArrayResize( f_entr.zip_offsets, f_entr.file_count ); //---Check for sizes using extra bit if ( ( ( zip_header.bit_flag & 4 ) >> 2 ) == 1 ) { is_descr = true; } else { is_descr = false; f_entr.pack_size[ f_entr.file_count - 1] = zip_header.pack_size; f_entr.unpack_size[ f_entr.file_count - 1] = zip_header.unpack_size; } //---Get current file name ArrayResize( f_name, zip_header.fn_len ); f_entr.zip_fnames[f_entr.file_count - 1] = ""; uint fn_res = FileReadArray( handle, f_name, 0, int( zip_header.fn_len ) ); for ( int i = 0; i < int( fn_res ); i++ ) f_entr.zip_fnames[f_entr.file_count - 1] += CharToString( f_name[i] ); //---Store offset f_entr.zip_offsets[ f_entr.file_count - 1] = FileTell( handle ); //---Get descriptor, if present if ( is_descr ) { uint sign; while ( FileTell( handle ) < ( file_size - uint_size ) ) { sign = FileReadInteger( handle, uint_size ); if ( ( sign == 0x04034b50 ) || ( sign == 0x02014b50 ) ) { //---Seek back for read descriptor FileSeek( handle, -( uint_size + descr_size ), SEEK_CUR ); FileReadStruct( handle, data_descriptor ); f_entr.pack_size[ f_entr.file_count - 1] = data_descriptor.pack_size; f_entr.unpack_size[ f_entr.file_count - 1] = data_descriptor.unpack_size; //---Align file positon to new file FileSeek( handle, f_entr.zip_offsets[f_entr.file_count - 1] + f_entr.pack_size[ f_entr.file_count - 1], SEEK_SET ); break; } } } else //---Seek to new file FileSeek( handle, f_entr.pack_size[ f_entr.file_count - 1 ], SEEK_CUR ); } } } else { Print( "Invalid zip file size!" ); } } else { Print( "Invalid zip file handle!" ); } return( f_entr.file_count ); } //+------------------------------------------------------------------+ //| Get file from ZIP file | //+------------------------------------------------------------------+ bool GetFile( const int handle, const ulong offset, const uint pack_size, const uint unp_size, uchar &unp_data[] ) { if ( ( handle != INVALID_HANDLE ) && ( pack_size != 0 ) && ( unp_size != 0 ) ) { uchar pack_data[]; ArrayResize( pack_data, pack_size + hdr_size ); FileSeek( handle, offset, SEEK_SET ); uint ar_res = FileReadArray( handle, pack_data, hdr_size, pack_size ); if ( ar_res == pack_size ) { pack_data[0] = 0x78; pack_data[1] = 0x5E; ResetLastError(); uint dec_res = CryptDecode( CRYPT_ARCH_ZIP, pack_data, key, unp_data ); if ( dec_res == unp_size ) { return( true ); } else { Print( "Last error = ", GetLastError() ); } } } return( false ); }Zorluklar:
Vasili!
Senden bir cevap beklemiyordum. (MQ'nun yapı 1100'deki değişiklikleri uygulamayı başardığını bilmiyorum)
kod çözücü:
Zorluklar:
Mikalas , kutudan çıkarmanın sonunu kontrol ederek kod çözme ve kodlama kodunu kütüphane şeklinde yapmak mümkün müdür?
Kesinlikle. Yakın gelecekte yapacağım şey bu. Paketleme/açma olacak. Arşive dosya ekleme ve çıkarma. Ana şey, CryptDecode'un başarısız olmamasıdır.
Vasili!
ZIP ambalajına mı ihtiyacınız var?
Buna değer olduğunu düşünmüyorum.
1. ZIP'ye dayalı bir veritabanı oluşturmak istiyorsanız, bu önemli olmayacaktır.
Yakında MQ, veritabanıyla çalışmak için standart işlevler ekleyecektir (Renat bir anket yaptı)
2. uint'ten büyük dosyalarla sorunu çözemezsiniz.
Ulong boyutları için sıkıştırma ZIP64 olmalıdır.
3. MT5 verilerinin nasıl sıkıştırıldığını bilmiyorsunuz
Belki büyük dosyalar (uint boyutunda bile)
SAAT sıkıştır!
4. Dosyaları arşive "taşımak" için
hafızada çok fazla bilgi var - FRENLER olacak!
gerçekten tavsiye etmem...
Muhtemelen eski moda bir yol düşünüyorum, ancak internette veri aktarımını hızlandırmak için arşivlemek benim için ilginç. Yerel olarak, büyük sabit disklerle dosya boyutu alaka düzeyini kaybeder ve veritabanı sınırlı bir insan çevresi için olacaktır ve programcı ve kullanıcıdan ek bilgi gerektireceğinden uygulanması pahalı olacaktır.
Doğru, zip sıkıştırmada, özellikle metinde, rar'dan önemli ölçüde daha düşüktür - bu biraz üzücü.
Vasili!
ZIP ambalajına mı ihtiyacınız var?
Buna değer olduğunu düşünmüyorum.
Ben aksini düşünüyorum.
1. ZIP'ye dayalı bir veritabanı oluşturmak istiyorsanız, bu önemli olmayacaktır.
Yakında MQ, veritabanıyla çalışmak için standart işlevler ekleyecektir (Renat bir anket yaptı)
Hayır, zip bir veritabanına alternatif olarak ilgi çekici değildir. Bu yüzden paketleme ile uğraşmaya değmez.
2. uint'ten büyük dosyalarla sorunu çözemezsiniz.
Ulong boyutları için sıkıştırma ZIP64 olmalıdır.
WinZip veya WinRar'ın bir benzerini yaratmak gibi bir amacım yok. Sadece en temel arşivler. Hiç kimse 4 GB'den büyük dosyaları paketlemeyi düşünmez bile.
3. MT5 verilerinin nasıl sıkıştırıldığını bilmiyorsunuz
Belki büyük dosyalar (uint boyutunda bile)
SAAT sıkıştır!
4. Dosyaları arşive "taşımak" için
hafızada çok fazla bilgi var - FRENLER olacak!
gerçekten tavsiye etmem...
1. MQ, yavaş işlevler yapmaz ve yapıyorsa, hizmet masasından gelen talepler üzerine çalışmalarını zamanında optimize eder. Nedense CryptEncode'un uçacağından eminim.
2. Fren olmayacak. Modern MQL5'in performans açısından neler yapabileceğini bilmiyorsunuz. Modern bilgisayarlarda bellek kir gibidir. Birkaç yüz megabaytlık bir dosyanın yüklenmesi ve paketlenmesi önemsiz bir meseledir ve daha fazlası gerekli değildir. Çünkü bunlar başka konular.
Vasili!
ZIP ambalajına mı ihtiyacınız var?
Buna değer olduğunu düşünmüyorum.
Aksini düşünüyorum.
Hayır, zip bir veritabanına alternatif olarak ilgi çekici değildir. Bu yüzden paketleme ile uğraşmaya değmez.
WinZip veya WinRar'ın bir benzerini yaratmak gibi bir amacım yok. Sadece en temel arşivler. Hiç kimse 4 GB'den büyük dosyaları paketlemeyi düşünmez bile.
1. MQ, yavaş işlevler yapmaz ve yapıyorsa, hizmet masasından gelen talepler üzerine çalışmalarını zamanında optimize eder. Nedense CryptEncode'un uçacağından eminim.
2. Fren olmayacak. Modern MQL5'in performans açısından neler yapabileceğini bilmiyorsunuz. Modern bilgisayarlarda bellek kir gibidir. Birkaç yüz megabaytlık bir dosyayı yüklemek ve paketlemek önemsiz bir meseledir, ancak daha fazlasına ihtiyacınız yok. Çünkü bunlar başka konular.
Muhtemelen eski moda bir yol düşünüyorum, ancak internette veri aktarımını hızlandırmak için arşivlemek benim için ilginç. Yerel olarak, büyük sabit disklerle dosya boyutu alaka düzeyini kaybeder ve veritabanı sınırlı bir insan çevresi için olacaktır ve programcı ve kullanıcıdan ek bilgi gerektireceğinden uygulanması pahalı olacaktır.
Doğru, zip sıkıştırmada, özellikle metinde, rar'dan önemli ölçüde daha düşüktür - bu biraz üzücü.
Doğru yaptı. Gönderilen bilgilerin paketlenmesi sayesinde WebRequest üzerinden üçüncü taraf bir sunucu ile çok daha hızlı iletişim kurmak mümkün olacaktır. Bu, bir kutuyu yeniden başlatmanın neden yapılacak doğru şey olduğuna dair başka bir fikir.
Doğru, zip sıkıştırmada, özellikle metinde, rar'dan önemli ölçüde daha düşüktür - bu biraz üzücü.
Bize verdiklerini takdir edin. İnanın bana, en yaygın sıkıştırma formatı ile çalışma yeteneği, tüm görevlerin %90'ını kapsar. Zip, fazlalığın %80'ini oldukça başarılı bir şekilde ortadan kaldırır. Ardından, kimsenin ihtiyaç duymadığı papağan arayışı gelir.
İyi şanlar!