![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброй ночи...
Пытаюсь разобрать BLOB поле посимвольно на составляющие... ВLOB-поле залил в string... в цикле по стрингу обращаюсь к каждому символу string[i]... но попадаются варианты когда string[i] = '!' или может быть равен string[i] = #33... собственно вопрос... как мне отличить '!' от #33 (в char() - это одно и тоже)... Спасибо за помощь... Последний раз редактировалось birrrma, 29.10.2010 в 23:38. |
#2
|
||||
|
||||
![]() что то я сейчас не то сморожу мне кажется
![]() ![]() Код:
var result:Integer; begin // Сравнение некоторых строк result:= AnsiCompareStr(')', '#33'); if result <0 then showmessage('разнае'); if result = 0 then ShowMessage('одинаковые'); if result > 0 then ShowMessage('разнае'); end; ![]() ![]() |
#3
|
|||
|
|||
![]() Цитата:
В том то и дело... я не знаю что за параметр входит в char... массив String у меня это выглядит так ['в','ц','в','_','ц','ы','у',#0,#7,'a','!','2','@', #0,#ad,'a','s','d','1','+'] мне нужно каким-то образом отличить char(string[i]) - это символьное значение char('!') или целочисленное char(#33) Последний раз редактировалось birrrma, 30.10.2010 в 00:02. |
#4
|
||||
|
||||
![]() Визуально-то они может и одинаковы, но вот код у них разный. Поэтому с ним и надо работать:
Код:
Ord(s[i]) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() наверное не так изъясняюсь... мне нужно знать наверняка...
как представлен string[i]... как символ '!' или как код #13 ... если параметр представлен как #13, то мне надо обработать #13 не как значение string[i] равное "восклицательтному знаку" а как "число тринадцать" |
#6
|
||||
|
||||
![]() а string[i] может быть представлен как код...? теперь я чего то не понимаю...
![]() ![]() |
#7
|
|||
|
|||
![]() есть string равный 'вцв_цыу'#0#7'a!2@'#0#33'asd1+'
string[3] будет явно равен _ А вот string[14] хоть фактически и равен #33 , но вернет значение ! вот я о том и говорю.... как мне узнать чем представлен I-й член стрингового массива... символьным или значением типа #33... если символьным... то у меня идет одна ветка алгоритма... если значение с "решеткой"... то идет другая ветка алгоритма |
#8
|
|||
|
|||
![]() В 4 посте ответ, насколько я понимаю. Ord возвращает число, под которым символ находится в таблице.
|
#9
|
||||
|
||||
![]() Кажется я понял в чем непонятка. Вас смущает, что в строке символы представлены, то буквой, а то комбинацией решетка и цифра?
Это просто символьное представление и не более того, Дело в том, что часть символов используются как служебные, и что-бы можно было все-же их в строку вставлять в Борланд придумали такую запись. Например комбинация символов #13#10 в исходном своем представлении обычно используется как перенос строки, #8 - это уже символ табуляции и т.д. Скажем, если я хочу вывести сообщение в 2 строки я буду писать так: Код:
ShowMessage('Hello'#13#10'world!'); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 30.10.2010 в 03:43. |
#10
|
|||
|
|||
![]() To Страдалецъ
Вы уже близки к тому ответу что мне нужен... Если развить Ваш пример - ShowMessage('Hello'#13#10'world!'); то может быть и такой вариант ShowMessage('Hello'#13#10'world'#33); Где Ваш "восклицательный знак" представлен группой #33... И то и то сообщение на экране будут абсолютно одинаковыми... но мне нужно знать представлен символ в стринге (это может быть не только восклицательный знак) явно или с помощью комбинации... Последний раз редактировалось birrrma, 30.10.2010 в 12:01. |
#11
|
||||
|
||||
![]() никак это нельзя узнать, в памяти компов ВСЕ хранится в числах. как ни напиши, '!' или #33, в памяти все это будет выглядеть как 33 (а точнее как 00100001) и никак иначе. и самому компу плевать, текст это, звук или что-либо еще.
З.Ы. зачем вообще BLOB-поле читать как строку? это же бинарные данные РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#12
|
||||
|
||||
![]() Как уже сказали, узнать это по скомпилированному коду нельзя. Такое представление сделано только для пользователя в процессе разработки и для корректной сборки линкером приложения. В памяти выделяется блок данных под строковую переменную, где она и хранится в окончательном виде. Никаких кавычек и решеток там уже нет, там просто непрерывный набор байт.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
|||
|
|||
![]() Как уже сказали, для компьютера оба представления одинаковы. Запись вида #nn говорит компилятору, что это символ (char) с кодом nn. Они равнозначны.
Теперь откуда получаются такие символы (когда смотришь в отладчике). В такой записи обычно представлены "непечатаемые" символы (с кодом < 32), т.к. отобразить напрямую их нельзя. В исходном коде обычно такая запись так же применяется для ввода тех же "непечатаемых" символов. Хотя никто не мешает ее применять и для печатаемых. Код:
var c1, c2 : char; begin c1 := 'A'; c2 := #65; If c1 = c2 then showmessage('matched') else showmessage('not matched'); end; |
#14
|
|||
|
|||
![]() Ошибочка однако...
Последний раз редактировалось birrrma, 31.10.2010 в 15:38. |
#15
|
|||
|
|||
![]() Цитата:
Чего их нельзя было в нормальной табличной форме в базе разместить я не знаю... Короче таки разобрать строку получилось... спасибо за ответы... |