Страница 1 из 1

Списки в Clarion

Добавлено: 14 Октябрь 2020, 22:08
SergioRaguzini
Привет Всем!

Есть строка с номерами корпусов гостиницы 3,5,6 в качестве разделителя между элементами (номеров корпусов) используются запятые. Мне надо выделить отдельно из строки номер каждого корпуса. Я никогда особо раньше не заморачивался, обрабатывал строку '3,5,6' считал запятые слева направо и по ним выделял слова. Можно конечно для такой цели разделения создать временный текстовый (с драйвером Ascii), записать в него строку '3,5,6', закрыть его, а потом открыть его же с драйвером Basic чтобы получить значения в переменные

Тут пришлось недавно писать небольшую процедуру на Python и обратил внимание, что в Python есть такое понятие как "списки" к каждому элементу которого можно адресно обратиться (что удобно), например:

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

Builds_Num = [3,5,6]
bremen_musicians = ['Кот', 'Пёс', 'Трубадур', 'Осёл']
Вопрос, конечно, не прикладного характера (посчитать разделители и выделить содержимое не проблема), а больше из любопытства, м.б. и в Clarion есть тоже какой-то простой вариант?

Списки в Clarion

Добавлено: 14 Октябрь 2020, 22:50
kreator
А очередь не подойдёт?
Опять же элемент строки Вы можете найти по адресу, типа a[11].
Есть ещё массивы.

Списки в Clarion

Добавлено: 15 Октябрь 2020, 0:32
Дед Пахом
В SystemStringClass можно поискать подходящие методы, в StringTheory точно есть. Да даже можно через cjson:

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

  PROGRAM

  INCLUDE('cjson.inc'), ONCE

  MAP
    INCLUDE('printf.inc'), ONCE
  END

jroot                         cJSONFactory
jmusicians                    &cJSON
jitem                         &cJSON
i                             LONG, AUTO

  CODE
  !- создать список строк
  jmusicians &= jroot.Parse('["Кот", "Пёс", "Трубадур", "Осёл"]')
  
  !- для каждого элемента в списке
  LOOP i=1 TO jmusicians.GetArraySize()
    !- получить элемент i
    jitem &= jmusicians.GetArrayItem(i)
    !- вывести его значение
    MESSAGE(printf('Musician[%i]=%s', i, jitem.GetStringValue()))
  END
  
  !- очистить
  jmusicians.Delete()

Списки в Clarion

Добавлено: 15 Октябрь 2020, 9:14
SergioRaguzini
Привет Всем!
Вообще тема, наверное, не та чтобы ее долго обсуждать.
kreator писал(а): 14 Октябрь 2020, 22:50 А очередь не подойдёт?
Я тоже так и делаю, разбираю с использованием массивов.
Дед Пахом писал(а): 15 Октябрь 2020, 0:32 даже можно через cjson
Прикольно

Спасибо за отклики!