« Предыдущий пост | На главную страницу | Следующий пост »

Глобальные массивы: функция GetItem()

Очень полезной функцией для работы с глобальным массивом может стать функция GetItem():

   bool GetItem(string array, int index, double &result) 

Эта функция пытается получить значение элемента с индексом index и вернуть это значение через переменную result в переменную, указанную в качестве третьего параметра при вызове этой функции.

Параметры:

  • array - имя массива
  • index - индекс элемента
  • result - элемент массива с индексом index

В случае возникновения ошибки функция GetItem() возвращает false. Если ошибки не было, то - true.

Обратите внимание на сивол & перед параметром result. Наличие этого символа говорит о том, что здесь мы применяем способ передачи параметров в функцию по ссылке, т.е. любые изменения переменной result изменят и значение переменной, которая была передана в качестве третьего параметра при вызове функции.

Более подробно об этом можно почитать в статье "Параметры функций".

Исходный код функции GetItem():

//+-------------------------------------------------------------------------------------------------+
//| Функция GetItem()                                                                      |
//|                                                                                                 |
//| Возвращает true, если не было ошибки, и false, если ошибка была|
//| В третьем параметре функции возвращает элемент массива с        |
//| индексом index                                                                         |
//|                                                                                                |
//| Параметры:                                                                               |
//|   array     - имя массива                                                              |
//|   index     - индекс элемента                                                       |
//|   result    - элемент массива с индексом index                              |
//+-------------------------------------------------------------------------------------------------+
bool GetItem(string array, int index, double &result) 
  {
    // Залокируем критическую секцию
    string critical_section = array+"Lock";
    if (Lock(critical_section)!=0) return(false);  
// Количество элементов массива хранится в переменной с именем, // равным имя массива + "Count" string gv_count; gv_count = array+"Count";
int count, err;
// Если глобальная переменная не существует, то элементов нет if (!GlobalVariableCheck(gv_count)) { err = GetLastError(); if (err!=0) { // Разлокировать критическую секцию Unlock(critical_section);
// Вывести сообщение об ошибке и выйти Print("GetItem()->GlobalVariableCheck(): ошибка ", err); return(false); } else count = 0; } else // переменная существует, получим количество элементов count = GlobalVariableGet(gv_count);
// Проверяем входной параметр на вхождение в допустимый диапазон if ((index<1)||(index>count)) { // Разлокировать критическую секцию Unlock(critical_section);
Print("GetItem(): значение входного параметра index (", index, ") не находится в допустимом диапазоне (1..", count,")"); return(false); }
result = GlobalVariableGet(array+DoubleToStr(index, 0));
// Разлокировать критическую секцию Unlock(critical_section);
err = GetLastError(); if (err!=0) { // Вывести сообщение об ошибке и выйти Print("GetItem()->GlobalVariableGet(): ошибка ", err); return(false); } else return(true); }

Думаю, что разобраться в этом коде Вам не составит труда:

  1. Локируем критическую секцию, чтобы исключить одновременный доступ к массиву из нескольких потоков.
  2. Получаем в переменную count количество элементов в массиве.
  3. Убеждаемся, что index находится в диапазоне 1..count.
  4. Читаем значение элемента с индексом index и передаем значение в третий параметр функции.
  5. Разлокируем критическую секцию.

Если в процессе выполнения функции встретятся ошибки, то разлокируем критическую секцию и вернем false.

В следующем выпуске я расскажу, как удалить элемент массива.



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Подписаться на мою рассылку



Размещение статьи "Глобальные массивы: функция GetItem()" на Вашем сайте

Размещение статьи "Глобальные массивы: функция GetItem()" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Глобальные массивы: функция GetItem()" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04