Показано с 1 по 4 из 4

Тема: инициализация массива структур

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию инициализация массива структур

    Здравствуйте!

    Пытаюсь найти красивое решение для сабжа.
    Определяю тип данных:

    Код:
    TYPE PARSCRIPT :
    STRUCT
       Nu:      INT;
       Po:      INT;
       Md:      INT;
       No:      INT;
       Mi:      DINT;
       Ma:      DINT;
       Na:      STRING(10);
    END_STRUCT
    END_TYPE

    В области переменных пробую создать экземпляр и инициализировать его:

    Код:
    VAR_GLOBAL CONSTANT
    a_psPar: ARRAY [0..1] OF PARSCRIPT :=
    (Nu:=101, Po:=2, Md:=0, No:=0, Mi:=0, Ma:=9999, Na:='Text1'),
    (102, 2, 0, 0, 0, 9999,'Text2');
    END_VAR
    Первая строка инициализации массива компилируется нормально. Но у меня в массиве будет до сотни таких структур! Ручки облом натруживать многочисленными Nu:= и так далее.
    Пробую выбросить присвоения и перечислить начальные значения просто в том порядке, что в объявлении (строка 2) - не компилирует. РУГАИЦЦА!

    Вот и 2 вопроса:
    Главный:
    1) Можно ли все же инициализировать без явных присвоения (по типу второй строчки)

    2) В случает невозможности - запасной вариант. Придется использовать корявые отдельные массивы. Что-то вроде такого:

    Код:
    VAR_GLOBAL CONSTANT
       aiPar: ARRAY [0..3, 0..1] OF INT :=
    101, 0, 0, 0,
    102, 0, 0, 0;
       adiPar: ARRAY [0..1, 0..1] OF DINT :=
    0, 99999,
    0, 99999;
       astPar: ARRAY [0..1] OF STRING(10) :=
    'Text1',
    'Text2';
       NU:   INT := 0;
       PO:   INT := 1;
       MD:   INT := 2;
       NO:   INT := 3;
       MI:      INT := 0;
       MA:      INT := 1;
    END_VAR
    И потом при вызове использовать обращения к разным массивам:

    Код:
    PROGRAM PLC_PRG
    VAR
       i:      INT;
       di:      DINT;
       st1:   STRING(10);
    END_VAR
    
    i    := aiPar[ NU, 0];
    di   := adiPar[ MI, 1];
    st1   := astPar[ 0];

    Такой подход мне не нравится еще и потому, что при большом реальном массиве трудно будет без ошибок менять число параметров (размер массива), отслеживать изменения в их начальных значениях и прочее и прочее... Хотелось бы все же иметь дело с массивом структур.

    Подскажите, плз, как же изящно инициализировать?
    Спасибо!
    Последний раз редактировалось drvlas; 27.11.2010 в 14:15.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •