Вверх ↑
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2015-01-31 00:15:26 ЛС | профиль | цитата
Два компонента для чтения/записи структур в потоках (stream).

Способности:
Работает с данными из потока в виде структуры, которая задается в специальном легком формате (ниже).

Как задать структуру?

  Очень просто: структура задается в виде списка точек, однако после имени точки следует имя типа этого поля. Например:
fisrtname=string
lastname=string
age=byte

Поддерживаются следующие типы:

  • Real (вещественное число)
  • Integer
  • Word
  • Byte
  • Char
  • String (первые 4 байта - размер строки, далее сама строка)
  • ZString (строка, заканчивающаяся символом с кодом 0 ('\0'))
Кроме того, после имени типа в квадратных скобках можно указать количество полей этого типа (т.е. задать массив). Из потока данных они будут считаны в виде MT-потока (и то же будет ожидаться при записи).
(!) Особенность: массив из char будет считан как обычная строка (фиксированной длины) и при записи тоже будет ожидаться строка (если она будет длиннее - все остальное не запишется).
Пример:
firstname=char[10]
lastname=char[10]
age=byte
mobilephone=byte[11]

Формат записи типа обновлен:
point_name=typename[_[s|u][le|be]][:length][[arr_length]]
s/u - знаковое ([s]igned) или беззнаковое ([u]nsigned)
le/be - little endian или big endian
:length - длина аргумента (префикса строки, длины целочисленного или вещественного числа. В байтах).
arr_length - длина массива элементов этого типа

Например:
a = integer_u:6 //целое, беззнаковое 6 байтовое
b = string:4[2] //массив из 2 строк с префиксом в 4 байта
c = word_be //слово с порядком байт Big Endian
d = integer_ule:5[2] //массив из 2 целых беззнаковых чисел с порядком байт Little Endian и длиной в 5 байт каждый

Скачать последнюю версию - filestructrw12.rar

P.S.: тестовая схема-пример прилагается.
карма: 10
6
файлы: 1filestructrw.rar [6.9KB] [399]
Голосовали:LainX, Леонид, halt, ser_davkin, miver, Konst
Редактировалось 14 раз(а), последний 2016-09-16 15:40:18