Пробежать по очереди с DIM полями на борту

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 426
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Пробежать по очереди с DIM полями на борту

Сообщение ingasoftplus »

c63, ABC

Для вывода всей информации по очереди (название и поля и его значение) я использую след код (INV:Queue моя очередь)

Код: Выделить всё

loop QueueNdx = 1 to records(INV:Queue)
get(INV:Queue, QueueNdx)

 Ndx = 0
 loop
  Ndx      += 1
  AnyVar   &= WHAT(INV:Queue, Ndx)  !return filed's value
  AnyVarFN  = WHO (INV:Queue, Ndx)  !return field name

  if AnyVar &= Null then break.

    ! тут я знаю AnyVarFN (имя поля) и AnyVar (значение)
  .
..
Все работает если ней нет полей с DIM. А сечас столкнулся с очередью с массивами и конечно получаю рантайм ошибку

Кто-нибудь может доработать код, чтоб он автоматом определял еще если поле с массивом, то пробегать по всем элементам и получать также пару Поле[x] = Значение ?

queue выгладит примено так:

Код: Выделить всё

INV:Queue            QUEUE,PRE()                           !
....
INV:TaxCodeSysRef    DECIMAL(8)                            !this works
INV:NLAcctB          STRING(14),DIM(5)                     !gives error
....
end 
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Пробежать по очереди с DIM полями на борту

Сообщение Дед Пахом »

Ну наверно надо юзать форму WHAT( group, number ,dimension )
С уважением, ДП
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 426
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Пробежать по очереди с DIM полями на борту

Сообщение ingasoftplus »

Дед Пахом писал(а): Ну наверно надо юзать форму WHAT( group, number ,dimension )
ну наверное надо :) но я поэтому и спрашиваю - как в динамике это сделать? хочется работающий пример :oops:
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Пробежать по очереди с DIM полями на борту

Сообщение Дед Пахом »

ну типа (не проверял)

Код: Выделить всё

loop ndim=1 to 999999
  dimref &= what(grpref, nfield, ndim)
  if dimref &= null
    !нет такого индекса в массиве, или вообще нет массива если ndim=1
    break
  end
end
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 3960
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Пробежать по очереди с DIM полями на борту

Сообщение Admin »

Используйте HOWMANY
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 426
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Пробежать по очереди с DIM полями на борту

Сообщение ingasoftplus »

Admin писал(а):Используйте HOWMANY
Именно, Жень! разобрался :cat:
Аватара пользователя
Admin
Администратор
Сообщения: 3960
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Пробежать по очереди с DIM полями на борту

Сообщение Admin »

Но не первый раз встречаюсь (и в некоторых других языках) что для двумерных массивов типа A(2,2) возвращает 4
Т.е. двумерные и выше уже не переберешь?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить