tol64 : Ve gerektiği gibi şu veya bu konuyu incelemeye çalışırsınız. Sisteminizde belirli "kaldıraçlara" (fonksiyonlara) ihtiyaç duyduğunuz ana ulaşır ulaşmaz, onlarla denemeye başlayın. Bu öğrenme yönteminin (benim durumumda) oldukça iyi çalıştığını buldum.)))
Evet öyle yapıyorum, input parametreleri ile initten çıkamıyorum :) ve diziler olmadan daha da zor olacak, 4k'da kontrol edildi.
Bildirirken değeri diziden kaldırın. Yardımdaki gibi olmalı:
string result[];
Ve herhangi bir hata olmayacak. Anladığım kadarıyla, to_split değişkeninde belirtilen tüm dize diziye yerleştirilir ve ardından alt dizeler çıkarılır .
Bildirirken değeri diziden kaldırın. Yardımdaki gibi olmalı:
Ve herhangi bir hata olmayacak. Anladığım kadarıyla, to_split değişkeninde belirtilen tüm dize diziye yerleştirilir ve ardından alt dizeler çıkarılır .
Bu anlaşılabilir. Sadece bu potansiyel bir komisyon .. Aslında kodumda bu hatayla karşılaştım ve kod daha sonra çalışıyor - bir hatayla.
İşte CopyBuffer için, örneğin yardımda
Если необходимо копировать заранее известное количество данных,
то лучше это делать в статически выделенный буфер,
чтобы избежать излишнего перевыделения памяти.
Ve mantık nerede? yani - StringSplit ile fark nedir?
Ve tüm dizileri dinamik hale getirmek için - sonunda yeterli hafızaya sahip olmayacaksınız, bu da acıtıyor ..
upgr ArrayResize sıfırlama ile elbette bir seçenek, ama benim zevkime göre değil.
Örneğinizde sorun, StringSplit() işlevinin parametre olarak iletilen dizideki gerekli bellek miktarıyla ilgilenmesidir.
Bu nedenle, statik bir dizinin çalışmasına rağmen (yeterli bellek varsa), yeniden bölümlemeye çalıştıkları için bir hataya neden olduğu ortaya çıkıyor.
Burada, statik ve dağıtılmış dinamik dizilerle seçeneği deneyin, netleşecektir:
voidOnStart ()
{
//---string to_split= "мама_мыла_раму" ; // строка для разбивки на подстрокиstring sep= "_" ; // раздедитель в виде символаushort u_sep; // код символа разделителяstring result[ 3 ]; // массив для получения строк//ArrayResize(result,3); //--- получим код разделителя
u_sep= StringGetCharacter (sep, 0 );
//--- разобьем строку на подстрокиint k=StringSplit(to_split,u_sep,result);
Print ( "GetLastError=" , GetLastError ()); // это я добавил чтоб видеть есть ли ошибка
//--- выведем комментарий PrintFormat ( "Получено строк: %d. Использован разделитель '%s' с кодом %d" ,k,sep,u_sep);
//--- теперь выведем все полученные строкиif (k> 0 )
{
for ( int i= 0 ;i<k;i++)
{
PrintFormat ( "result[%d]=%s" ,i,result[i]);
}
}
}
Örneğinizde sorun, StringSplit() işlevinin parametre olarak iletilen dizideki gerekli bellek miktarıyla ilgilenmesidir.
Bu nedenle, statik bir dizinin çalışmasına rağmen (yeterli bellek varsa), yeniden bölümlemeye çalıştıkları için bir hataya neden olduğu ortaya çıkıyor.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
evet, 3 harfe kadar kaldırırsanız
konu o değil.Ve gerektiği gibi şu veya bu konuyu incelemeye çalışırsınız. Sisteminizde belirli "kaldıraçlara" (fonksiyonlara) ihtiyaç duyduğunuz ana ulaşır ulaşmaz, onlarla denemeye başlayın. Bu öğrenme yönteminin (benim durumumda) oldukça iyi çalıştığını buldum.)))
O zaman daha yetkin yoldaşların cevabını bekliyoruz.)))
Bekleriz :)
Beklemeseniz iyi olur.)) Denemeye devam edin.))
Bildirirken değeri diziden kaldırın. Yardımdaki gibi olmalı:
string result[];Ve herhangi bir hata olmayacak. Anladığım kadarıyla, to_split değişkeninde belirtilen tüm dize diziye yerleştirilir ve ardından alt dizeler çıkarılır .Beklemeseniz iyi olur.)) Denemeye devam edin.))
Bildirirken değeri diziden kaldırın. Yardımdaki gibi olmalı:
Ve herhangi bir hata olmayacak. Anladığım kadarıyla, to_split değişkeninde belirtilen tüm dize diziye yerleştirilir ve ardından alt dizeler çıkarılır .Bu anlaşılabilir. Sadece bu potansiyel bir komisyon .. Aslında kodumda bu hatayla karşılaştım ve kod daha sonra çalışıyor - bir hatayla.
İşte CopyBuffer için, örneğin yardımda
Ve mantık nerede? yani - StringSplit ile fark nedir?
Ve tüm dizileri dinamik hale getirmek için - sonunda yeterli hafızaya sahip olmayacaksınız, bu da acıtıyor ..
upgr ArrayResize sıfırlama ile elbette bir seçenek, ama benim zevkime göre değil.
Anladığım kadarıyla, to_split değişkeninde belirtilen tüm dize diziye yerleştirilir ve ardından alt dizeler çıkarılır .
Örneğinizde sorun, StringSplit() işlevinin parametre olarak iletilen dizideki gerekli bellek miktarıyla ilgilenmesidir.
Bu nedenle, statik bir dizinin çalışmasına rağmen (yeterli bellek varsa), yeniden bölümlemeye çalıştıkları için bir hataya neden olduğu ortaya çıkıyor.
Burada, statik ve dağıtılmış dinamik dizilerle seçeneği deneyin, netleşecektir:
Burada, statik ve dağıtılmış dinamik dizilerle seçeneği deneyin, netleşecektir:
Dinamik bir diziyi denemek için ArrayResize (sonuç,3) yorumunu kaldırın; ? Eğer öyleyse, derleme uyarısı:
Dinamik bir diziyi denemek için ArrayResize(result,3); ? Eğer öyleyse, derleme uyarısı:
bu çözülmez bir sorun mu? dinamik hale getirin.
Örneğinizde sorun, StringSplit() işlevinin parametre olarak iletilen dizideki gerekli bellek miktarıyla ilgilenmesidir.
Bu nedenle, statik bir dizinin çalışmasına rağmen (yeterli bellek varsa), yeniden bölümlemeye çalıştıkları için bir hataya neden olduğu ortaya çıkıyor.
Öyleyse StringSplit() statik dizilerle kullanılabilir mi, kullanılamaz mı?
Mümkünse, yeterli bellek varsa hata olmamalıdır. Değilse, o zaman çalışmamalıdır.