Çaydanlıktan gelen sorular - sayfa 35

 
Silent :

evet, 3 harfe kadar kaldırırsanız

konu o değil.

O zaman daha yetkin yoldaşların cevabını bekliyoruz.)))
 
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.
 
tol64 :
O zaman daha yetkin yoldaşların cevabını bekliyoruz.)))
Bekleriz :)
 
Silent :
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 .
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64 :

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.

 
tol64 :

Anladığım kadarıyla, to_split değişkeninde belirtilen tüm dize diziye yerleştirilir ve ardından alt dizeler çıkarılır .

Hayır, olamaz.
 
Silent :

Ö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:

 void OnStart ()
  {
//---
   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]);
        }
     }
  }
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Urain :

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ı:

 
tol64 :

Dinamik bir diziyi denemek için ArrayResize(result,3); ? Eğer öyleyse, derleme uyarısı:


bu çözülmez bir sorun mu? dinamik hale getirin.
 
Urain :

Ö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.

Neden: