Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

Как засунуть Set в строку   Найти похожие ветки 

 
salexn   (2006-10-03 14:29) [0]

Есть set of byte. Нужно запихнуть ег в строку. Можно конечно тупо пробежаться по всему set и если присутствует, добавить в строку. Но ведь можно как-то через MOVE это сделать. А как - не в курсе.


 
Palladin ©   (2006-10-03 14:31) [1]

Set не есть набор значений и Move к нему в данном случае неприменим


 
Сергей М. ©   (2006-10-03 14:31) [2]


> Нужно запихнуть ег в строку


И обязательно "запихнуть" ?
Тогда подробнее, про "пихание" ..

ПРиводи исх код и содержимое результ. строки ...


 
salexn   (2006-10-03 14:33) [3]

>Palladin

т.е. только через перебор? Вот так
var
 i: byte;
begin
 S := "";
for i := 1 to 255 do
 if i in aSetOfByte then
   S := S + chr(i);
end;


 
Reindeer Moss Eater ©   (2006-10-03 14:33) [4]

set это 32 байта.
Каждый бит отчечает за вхождение элемента в множество.
так что никакой Move здесь не прокатит.


 
Германн ©   (2006-10-03 14:52) [5]


> так что никакой Move здесь не прокатит.
>

Ну зачем уж так категорично.
Знать бы только зачем и что на самом деле хочет автор?


 
oxffff ©   (2006-10-03 14:55) [6]

Сейчас поможем засунуть/запихнуть. :)


 
Reindeer Moss Eater ©   (2006-10-03 14:55) [7]

>Знать бы только зачем и что на самом деле хочет автор?

Для этого достаточно прочитать его вопрос.
Он хочет байты сета (в котором нет самих байтов, а только битовые флаги) замувить в строку.
Поэтому вот так категорично.


 
oxffff ©   (2006-10-03 14:58) [8]


> Reindeer Moss Eater ©   (03.10.06 14:33) [4]
> set это 32 байта.
> Каждый бит отчечает за вхождение элемента в множество.
> так что никакой Move здесь не прокатит.


Set занимает до 32 байт.
Размер вычисляется как  (Max div 8) - (Min div 8) + 1


 
oxffff ©   (2006-10-03 15:01) [9]

>Знать бы только зачем и что на самом деле хочет автор?

Он хочет запихнуть. :)


 
salexn   (2006-10-03 15:04) [10]

Хотелось бы хранить разрешенные пользователю действия. Т.е. для каждого дейсвия есть свой id от 1 до 255. Все что разрешено записывается в AllowedOperation типа set of byte. В БД хранится как строка. Соответственно нужно строку преобразовать в set of byte и обратно.


 
oxffff ©   (2006-10-03 15:07) [11]

Так может в базе поменять поле на blob? И хранить свои 32 байта


 
Palladin ©   (2006-10-03 15:09) [12]

var
set_as_is:Set of Byte;
set_as_integer:Integer absolute set_as_is;

...
s:=IntToStr(set_as_integer);


 
oxffff ©   (2006-10-03 15:12) [13]

Palladin ©   (03.10.06 15:09) [12]

Скорее исправь. Set оf byte. Занимает 32 байта


 
oxffff ©   (2006-10-03 15:15) [14]

Palladin ©   (03.10.06 15:09) [12]

var set_as_is:Set of Byte;
   set_as_bytes:array[0..31] of byte absolute set_as_is;


 
Palladin ©   (2006-10-03 15:15) [15]

и?


 
Сергей М. ©   (2006-10-03 15:15) [16]


> salexn   (03.10.06 15:04) [10]


Ты так и не сказал, с какими конкретно проблемами ты столкнулся, когда что-то там куда-то там "засовывал") ...


 
Palladin ©   (2006-10-03 15:16) [17]


> oxffff ©   (03.10.06 15:15) [14]

ShowMessage(IntToStr(SizeOf(Integer)))


 
salexn   (2006-10-03 15:19) [18]

а я и не говорил, что есть проблемы. Я описал алгоритм, который знаю, но предположил, что есть более красивый способ. Уважаемый Palldin и 0xxffff любезно предоставили альтернативный вариант


 
oxffff ©   (2006-10-03 15:21) [19]


> Palladin ©   (03.10.06 15:16) [17]
>
> > oxffff ©   (03.10.06 15:15) [14]
>
> ShowMessage(IntToStr(SizeOf(Integer)))


ShowMessage(IntToStr(SizeOf(Integer))). Равен 4 байта

ShowMessage(IntToStr(SizeOf(set of byte))). Равен 32 байта. А не бита.

Понятно? :)


 
Palladin ©   (2006-10-03 15:23) [20]

а... как всегда... перепутал... звиняюсь...


 
Сергей М. ©   (2006-10-03 15:23) [21]


> salexn   (03.10.06 15:19) [18]



> Palldin и 0xxffff любезно предоставили альтернативный вариант


угу .. который так и называется - "запихать")


 
saxon   (2006-10-03 15:23) [22]


> salexn   (03.10.06 15:19) [18]

А не проще ли хранть как целое, а потом - операции с битами, и далее к перечислениям и если хотите к "Set of ..."?


 
Palladin ©   (2006-10-03 15:26) [23]

оно не 1 целое... а целых 8... я тебя обманул...

var
set_as_is:Set of Byte;
set_as_ints:Array [0..7] of Integer absolute set_as_is;

s:="";
for i:=0 to 7 do s:=s+IntToStr(set_as_ints[i])+",";
SetLength(s,Length(s)-1);


 
salexn   (2006-10-03 15:26) [24]

>Сергей М.
Ок. Ваш вариант??


 
Сергей М. ©   (2006-10-03 15:27) [25]


> salexn   (03.10.06 15:26) [24]


Сначала определись с конкретной СУБД и конкретным типом поля, которое должно хранить сабж ..


 
oxffff ©   (2006-10-03 15:31) [26]

Сделай поле BLOB.


 
salexn   (2006-10-03 15:34) [27]

>oxffff
>Сделай поле BLOB
Чем мне поможет поле БЛОБ?


 
oxffff ©   (2006-10-03 15:38) [28]

Храни свои 32 байта в базе в RAW виде.
И загружай их также.


 
Игорь Шевченко ©   (2006-10-03 15:57) [29]

А нафига BLOB ?
Достаточно char(32) и хранить строки вида
"00000000000AE1200000000000000000",
"00000000000AE0100000000000000000"....


 
evvcom ©   (2006-10-04 08:42) [30]

> [29] Игорь Шевченко ©   (03.10.06 15:57)

Это шестнадцатиричный формат? Тогда char(64).


 
Игорь Шевченко ©   (2006-10-04 10:01) [31]

evvcom ©   (04.10.06 08:42) [30]

Точно :) Это вода кипит при ста градусах.


 
oxffff ©   (2006-10-04 10:38) [32]

Игорь Шевченко ©   (03.10.06 15:57) [29]
А нафига BLOB ?

А вы уверены, что с char(32) не будет проблем при преобразовании.

Возможно СУБД и средства доступа к данным могут обрезать часть до
char(0)?


 
Игорь Шевченко ©   (2006-10-04 11:27) [33]

oxffff ©   (04.10.06 10:38) [32]

Меня уже поправили, char(64) надо. Проблем при преобразовании не будет, так как в базе хранится строковое значение, а с ним вроде никаких проблем с обрезанием нету.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.042 c
2-1160119374
dima_kds
2006-10-06 11:22
2006.10.22
ADOQuery в DBF


15-1159421245
boriskb
2006-09-28 09:27
2006.10.22
Похоливарить.


1-1158224139
Ruslan D
2006-09-14 12:55
2006.10.22
Работа со строками


15-1159441824
Алхимик
2006-09-28 15:10
2006.10.22
Комсомолец


2-1160048483
IDenS
2006-10-05 15:41
2006.10.22
Как преобразовать адрес объекта в строку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский