[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 560

 

Üzgünüm, bulamıyorum... lütfen söyle bana.

TEK BOYUTLU BİR DİZİNİN TÜM ELEMANLARI 1 İNDEKS İLE NASIL DEĞİŞTİRİLİR?

Bir tür işlem mi var yoksa onu bir döngüye sokmam mı gerekiyor?

 
peco :

Üzgünüm, bulamıyorum... lütfen söyle bana.

TEK BOYUTLU BİR DİZİNİN TÜM ELEMANLARI 1 İNDEKS İLE NASIL DEĞİŞTİRİLİR?

Bir tür işlem mi var yoksa onu bir döngüye sokmam mı gerekiyor?

https://docs.mql4.com/en/array/ArrayCopy
 
Chiripaha :

Tam olarak değil...

Menü gibi bir şey olsun diye yapmak istedim. Tıpkı bir bool değişkeni seçerken olduğu gibi, false veya true.
Böylece kullanıcı sadece iyi tanımlanmış parametre değerlerine tıklayabilir. Böylece "yanlışlıkla" gereksiz olanlarda araba kullanmaz, tk. bu durumda danışman düzgün çalışmayacaktır.

Kullanıcı bile benim. Çünkü somut bir değişken için parametrelerin ne olması gerektiğini unutmak mümkündür.


Sonra yap. Bool türünde harici değişken. == false ise, değişkenlere bazı değerler atanır, true ise - diğerleri. İkiden fazla parametre "kümesi" varsa, Boole yerine int tipi bir değişken kullanın ve 1 - birinci küme, 2 - ikinci vb.

Bu, hem her harici değişken için hem de hepsi için bir kerede yapılabilir (danışmanın ilk modu, ikincisi ...)

 
Teşekkür ederim!
 
peco :

Üzgünüm, bulamıyorum... lütfen söyle bana.

TEK BOYUTLU BİR DİZİNİN TÜM ELEMANLARI 1 İNDEKS İLE NASIL DEĞİŞTİRİLİR?

Bir tür işlem mi var yoksa onu bir döngüye sokmam mı gerekiyor?


https://www.mql5.com/en/forum/131859/page8#434278
 
Chiripaha :

Tam olarak değil...

Menü gibi bir şey olsun diye yapmak istedim. Tıpkı bir bool değişkeni seçerken olduğu gibi, false veya true.
Böylece kullanıcı sadece iyi tanımlanmış parametre değerlerine tıklayabilir. Böylece "yanlışlıkla" gereksiz olanlarda araba kullanmaz, tk. bu durumda danışman düzgün çalışmayacaktır.

Kullanıcı bile benim. Çünkü somut bir değişken için parametrelerin ne olması gerektiğini unutmak mümkündür.

MQL4'te böyle bir olasılık yoktur (ancak MQL5'te vardır). Bu parametreyi başlatma sırasında kontrol edebilir ve belirli bir değere karşılık gelmiyorsa bir hata sinyali verebilirsiniz. Ardından, başlangıcın en başında bir kontrol yapın. Bunu Uzman Danışmanımda yaptım, örneğin:

 extern int   val= 5 ;
       bool val_error= false ;
// -----
init()
{  ...
   if (val!= 5   || val!= 10 || val!= 20 || val!= 40 ||
       val!= 60 || // и т.д.)
      {   val_error= true ;
          Alert( "Неправильный val!" );
      }
   ...
}
// -----
start()
{   if (val_error= true ) return ;
   ...
}
 

Merhaba. Kullanıcı tarafından belirtilen bir dizine dosya yazan bir işlev yazmaya çalışıyorum (sanal alanın dışında çalışıyor).

Kodu " ZI_File_Functions_Full_Lib " kitaplığını kullanarak yazdım https://www.mql5.com/ru/code/8577

İşlev "   PathFunctions.dll . " https://www.mql5.com/ru/code/10873 Vista ile çalıştığı için çalışmıyor, Windows 7 kullanıyorum.

Gereksiz her şeyi kaldırdı. okumaya gerek yok, sadece bir dizin alın ve orada başlangıçta bilinen bir değere sahip bir dosya oluşturun, hepsi bu.

Sorular:

1. Dosyaya yazdığımız değerin nerede olduğunu bulamıyorum?

2. Hatanın nerede olduğunu anlayamıyorum?

Şimdiden teşekkürler.

 //===============================================================================================================================================================
//     Импортируемые функции.
//===============================================================================================================================================================

#import "ntdll.dll"
int RtlGetLastWin32Error();
int RtlSetLastWin32Error ( int dwErrCode);
#import
#include <WinKernel32.mqh>                                       // Заголовочный файл библиотеки "kernel32.dll" функций API Windows XP.

//===============================================================================================================================================================
// Объявленные константы.
//===============================================================================================================================================================

#define FILE_FULL_CREATE     0                                    // Создать или переписать файл.

//===============================================================================================================================================================
//    Функция открывает или создаёт файл.
//    Функция открывает/создает файл для ввода и/или вывода. Если при открытии для записи файла нет, то он будет создан. Для создания директории
//    используется функция "CreateDirectory()". Функция возвращает: handle - файловый описатель, если функция выполнилась без ошибки;
//                                                               -1     - возникла системная ошибка;
//                                                               -2     - ошибка при перемещении файлового указателя в конец файла;
//                                                               -3     - указан недопустимый способ открытия файла.
//===============================================================================================================================================================
int start(){
   int FileOpenFull ( string PathName= "D:\files\DATA.csv" ,       // Имя файла с абсолютным путём.
                     int     ModeCWR= 0 )                         // Способ открытия файла: 0 - FILE_FULL_CREATE    Открытие файла для записи. Если файл существует, то содержимое файла будет
                                                               //                                                уничтожено. Если файл с таким именем не существует, то будет создан новый.
    {
     int Error;                                                 // Номер последней ошибки.
     int Handle;                                               // Файловый описатель.
//===============================================================================================================================================================
  RtlSetLastWin32Error( 0 );                                                                                               // Обнуляем ошибку.
   if (ModeCWR != FILE_FULL_READ)                                                                                         // Если функция вызвана не для чтения, проверяем на наличие файла.
   {                                                                                                                     // Проверяем на наличие файла. Читаем файл.
    Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ , NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
     if (RtlGetLastWin32Error() == 2 && Handle == - 1 ) ModeCWR = FILE_FULL_CREATE;                                         // Файла нет. Создаём файл.
     else
     {
       if (!CloseHandle (Handle))
       {
        Error = RtlGetLastWin32Error();
         Print ( "Ошибка в функции \"FileOpenFull()\". Файл с путём \"" , PathName, "\" не закрыт при проверки на наличие. Последняя ошибка: \"" , Error, "\". " , StringError (Error));
         return (- 1 );
       }
     }
    RtlSetLastWin32Error( 0 );                                                                                             // Обнуляем ошибку.
   }
   
//===============================================================================================================================================================
//     Переключатель по способам открытия файла.
//===============================================================================================================================================================
  
   switch (ModeCWR)
   {                                                                                                                     // Создаём файл.
     case FILE_FULL_CREATE:
     {
      Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE , NULL , CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
       if (Handle == - 1 )
       {
        Error = RtlGetLastWin32Error();
         Print ( "Ошибка в функции \"FileOpenFull()\". Файл с путём \"" , PathName, "\" не открыт. Последняя ошибка: \"" , Error, "\". " , StringError (Error));
       }
       return (Handle);
     }
    
//===============================================================================================================================================================
//     Функция закрытия файла.
//     Функция закрывает ранее открытый файл. Если файл закрыт успешно, функция возвращает TRUE, иначе возвращает FALSE.
//===============================================================================================================================================================

   bool FileCloseFull ( int Handle)                                                                                   // Файловый описатель, возвращаемый функцией "FileOpenFull()".
    {
     int Error;                                                                                                       // Номер последней ошибки.
     //----
     RtlSetLastWin32Error ( 0 );
     if (!CloseHandle (Handle))
      {
       Error = RtlGetLastWin32Error();
       Print ( "Ошибка в функции \"FileCloseFull()\". Последняя ошибка: \"" , Error, "\". " , StringError (Error));
       return (false);
      }
     else return (true);
    }

//===============================================================================================================================================================
//    Функция возвращает код системной ошибки.
//===============================================================================================================================================================

   int SystemError()
    {
     return (RtlGetLastWin32Error());
    }
 
//===============================================================================================================================================================
//    Функция возвращает строковое описание кода системной ошибки.
//===============================================================================================================================================================

   string StringError ( int ErrorCode)                                                     // Код системной ошибки.
    {
     int     i;
     string String = "" ;
     //----
     int     Buffer[ 128 ];
     //----
     ArrayInitialize (Buffer, 0 );
     FormatMessageA ( 0x1000 , 0 , ErrorCode, 0 , Buffer, ArraySize (Buffer), 0 );
     //----
     for (i = 0 ; i < ArraySize (Buffer); i++)
      {
       String = String + CharToStr (Buffer[i]       & 0xFF )
                       + CharToStr (Buffer[i] >>   8 & 0xFF )
                       + CharToStr (Buffer[i] >> 16 & 0xFF )
                       + CharToStr (Buffer[i] >> 24 & 0xFF );
      }
     return ( StringTrimRight (String));
    }
//===============================================================================================================================================================
//    Конец
//===============================================================================================================================================================
}
 
merkulov.artem :

Merhaba. Kullanıcı tarafından belirtilen bir dizine dosya yazan bir işlev yazmaya çalışıyorum (sanal alanın dışında çalışıyor).

Kodu " ZI_File_Functions_Full_Lib " kitaplığını kullanarak yazdım https://www.mql5.com/ru/code/8577

İşlev "   PathFunctions.dll . " https://www.mql5.com/en/code/10873 Vista ile çalıştığı için çalışmıyor, Windows 7 kullanıyorum.

Gereksiz her şeyi kaldırdı. okumaya gerek yok, sadece bir dizin alın ve orada başlangıçta bilinen bir değere sahip bir dosya oluşturun, hepsi bu.

Sorular:

1. Dosyaya yazdığımız değerin nerede olduğunu bulamıyorum?

2. Hatanın nerede olduğunu anlayamıyorum?

Şimdiden teşekkürler.

Artyom!!! Windows 7 ile çalışmadığı nerede yazıyor? Neden bu kadar dikkatsiz okuyorsun? Hiçbir şey almamana şaşırmadım.



Koduna baktım ve programlamayı hiç bilmediğini fark ettim. İlk olarak, yardımdan bir örnek alın . Çalıştırmak. Nasıl çalıştığını gör. Sonra daha karmaşık olanlara geçin.

Dosya önce oluşturulur veya açılır. Sonra yaz veya oku. Sonra kapanırlar. Az önce işlev bildirimlerini başlangıca kopyaladınız. Evrensel bir işlevden bir kod parçası çıkardılar. Şimdi sadece asılı kalıyor. Hiçbir şey için geçerli değil. Bu neden? Bu işe yaramayacak.

 
Tünaydın! Söyle bana, lütfen, strateji test cihazı nasıl kapatılır, neye tıklamalıyım?
 
angelina8 :
Tünaydın! Söyle bana, lütfen, strateji test cihazını nasıl kapatabilirim, neye tıklamalıyım?