OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 16 Декабрь, 2017 02:28

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 21 Ноябрь, 2017 15:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8904
Откуда: Россия, Орёл
Речь о том случае, когда для хранения строк используется обычный ARRAY N OF CHAR, но последовательность строковых значений не экономично хранить в ARRAY N OF ARRAY M OF CHAR.

Конкретный пример:
в АСУТП специальная вьюшка-индикатор опрашивает контроллер, отправляя ему GetStatusMsg, а контроллер может вернуть от 0 до N отдельных аббревиатур для индикации.
Разумеется, никаких динамических массивов, вся информация должна передаваться через статические поля.

Итоговый вид:
Код:
      Status* = EXTENSIBLE RECORD
         indicate*: ARRAY 64 OF CHAR;
         color*: ARRAY 8 OF INTEGER
      END;


В indicate надо помещать НЕСКОЛЬКО отдельных строковых значений.
Альтернатива, естественно, типа: ARRAY 8 OF ARRAY 24 OF CHAR - но мы должны правильно оценить все пределы, и если действительно позволять разброс и по количеству элементов, и по длине не сильно ограничивать - то избыток по памяти. Для встроенки, например, уже ощутимо может быть.

Очевидный другой вариант - просто хранить в одной строке через разделитель.

Выбрали простое соглашение:
{SEP_CHAR {VAL_CHAR}}0X

Например: ":val1:val2:<пустое_знач>:val4"
Во-первых, избранный разделитель сразу указан в позиции 0. Во-вторых, конкатенировать очередное значение можно, не проверяя, пустая строка или не пустая.
Если нужен разделитель, гарантировано не входящий в строки, никто не мешает взять невидимые коды. Например, unit separator из ANSI: 1FX

Собиратель значения, таким образом, просто использует станадартную конкатенацию строк (+).

А получатель либо разворачивает в ARRAY OF ARRAY на стеке, либо проходит итерационно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Ноябрь, 2017 18:53 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1526
Откуда: Беларусь, Минск
В Си испокон веков сипользовали ноль в качестве SEP_CHAR. Я конкретной задачи не знаю, но может и Вам подойдёт нолик?

"val1<0X>val2<0X>Val3<0X>"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Декабрь, 2017 01:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8904
Откуда: Россия, Орёл
Ну а каким образом отличать конец значения от конца всех значений? Двумя 0X?
Наш вариант удобнее, т.к. можно любой разделитель применить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB