- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
void Attr::setConvertedValue(std::string pValue)
{
/* ............. - BEGIN - Place the HTML code instead of the */
/* plain values. This is needed since special XML characters */
/* might exist. */
for(int i = 0; i < pValue.length(); i++)
{
int ascii = (int)pValue[i];
if(!( (ascii == 32 ) ||
(ascii >= 48 && ascii <= 57) ||
(ascii >= 65 && ascii <= 90) ||
(ascii >= 97 && ascii <= 122) ) )
{
if( ascii < 0 )
ascii += 256;
std::ostringstream stream;
stream << ascii;
std::string newString = stream.str();
newString = "&#" + newString + ';';
pValue.replace(i, 1, newString);
i += newString.length() - 1;
}
}
/* ............. - END - Place the HTML code instead of the */
/* plain values. This is needed since special XML characters */
/* might exist. */
mConvertedValue = pValue;
}
я стою на асфальте, ноги в лыжы абуты.
мы эскайпим значения для ХМЛ.
вы тут посмейтесь, а я пошел головой об стенку стучатся.
ЗЫ пысано в Бразилии.
TarasB 11.01.2011 16:45 # −4
(ascii >= 48 && ascii <= 57) ||
(ascii >= 65 && ascii <= 90) ||
(ascii >= 97 && ascii <= 122) ) )
Бедняги, у них же нет возможности написать
if not (ascii in [32, 48..57, 65..90, 97..122]) then...
absolut 11.01.2011 22:37 # +5
TarasB 12.01.2011 10:05 # 0
А попки у сишников болят, я смотрю... Больной вопрос у них - убогость некоторых конструкций.
bugmenot 12.01.2011 11:20 # 0
TarasB 12.01.2011 11:34 # +2
Это как лиса и виноград, сишники сочиняют сказки о неоптимальности конструкций, которых у них нет.
Vindicar 12.01.2011 13:34 # −2
да ты что?
Т.е. if (65534 in [65533, 65534, 65535]) будет создавать в памяти константу на 64 кбит?
TarasB 12.01.2011 14:25 # +1
Это не скомпилится. Только для перечислимых типов и чисел до 255.
absolut 12.01.2011 18:28 # +4
TarasB 12.01.2011 18:55 # −3
Хочешь больше - используй свои карты.
Либо пиши
if i-65500 in [33,34,35]
shm 12.01.2011 18:59 # +2
TarasB 12.01.2011 20:35 # −2
Берёшь, и пишешь
if ((1 << i) & ((1 << 32)|(1<<48)|итд))
Только писанины намного больше.
Ещё можно написать так:
case i of
65533, 65534, 65535: begin
...
end;
end;
shm 12.01.2011 20:47 # +1
pushkoff 12.01.2011 23:55 # +3
TarasB 13.01.2011 11:57 # 0
1,2, 512, 30000..32000, 12541212..12545000: begin
end;
end;
guest 13.01.2011 00:44 # +1
>Хочешь больше - используй свои карты.
В С++ так же можно. :)
Раз есть ограничение в 255, то скорее всего и там и там придётся писать велосипед, так что эта дельфовская возможность не защитана...
Тем более, в С++ есть готовые удобные оптимизированные и проверенные годами тестирования и эксплуатации библиотеки.
В дельфи, если и удастся найти компонент, то он будет очень не проверенный и написаный абы как. (Так называемая проблема языка из не крупнопроизводственных отраслей).
guest 13.01.2011 03:47 # −1
Оговорился. Не только С++, а во всех крупнопроизводственных меинстримовых языках (к коим дельфи, наверное к счастью, не относится).
Впрочем, думаю, это было и так понятно, извиняюсь за КЭПерство.
TarasB 13.01.2011 12:00 # −4
Ага,
if ((1 << i) & ((1 << 32)|(1<<48)|итд))
shm 13.01.2011 13:18 # +1
guest 13.01.2011 14:59 # −1
pushkoff 13.01.2011 17:18 # 0
не удобно, но без глупых ограничений...
можно еще тоже самое сделать на битовых таблицах, будет медленнее но съест меньше памяти и опять таки без ограничений
shm 13.01.2011 17:40 # 0
guest 13.01.2011 17:58 # −1
Чем не стандартное средство? :)
shm 13.01.2011 18:20 # 0
bugmenot 13.01.2011 18:07 # +1
absolut 13.01.2011 19:37 # 0
TarasB 13.01.2011 19:08 # −1
guest 13.01.2011 03:34 # −1
Часто такое решается на более высоком уровне, например фабриками или полиморфизмом.
Эта конструкция просто становится не нужна.
TarasB 13.01.2011 11:58 # −5
guest 13.01.2011 14:57 # −1
А если Вам понадобиться исправить этот код в будующем - с вашим подходом потратите несколько недель, отлаживая код и разбираясь в нем.
TarasB 13.01.2011 16:55 # −1
guest 13.01.2011 17:51 # 0
TarasB 14.01.2011 11:41 # −2
guest 14.01.2011 12:43 # 0
TarasB 14.01.2011 12:53 # −2
Но вот вместо if ((i > 1 && i<1000) || итд
куда проще сделать нормальный паскалевский case
Vindicar 12.01.2011 23:22 # 0
pushkoff 12.01.2011 14:13 # −3
TarasB 12.01.2011 14:29 # −3
pushkoff 12.01.2011 22:45 # +6
if i in [float(x*y+x/y) for x in range(0,10,2) for y in range(2,5)]:
что еще раз доказывает что паскаль - говно!
bugmenot 12.01.2011 22:58 # +4
TarasB 13.01.2011 11:59 # −5
pushkoff 13.01.2011 13:09 # 0
guest 13.01.2011 15:01 # +2
Откуда такие цифры? Всё зависит от задачи, компилятора и метода её решения.
На С++ можно так наговнякать... И легче, чем в дельфи.
pushkoff 13.01.2011 17:20 # −1
цифра от Тараса, он в последнее время жирнеет продвигая делфи...
guest 13.01.2011 17:47 # +2
Помоему он просто над нами стебётся, естественно зная, что дельфи УГ.
TarasB 14.01.2011 12:16 # −3
На самом деле Паскаль, как язык, превосходит Си/Си++ во всех отношениях. То, что слов больше надо писать - это полная фигня по сравнению со временем отладки. Отсутствие мощных оптимизирующих компиляторов - тоже не вина языка.
Распространение Си - это большая историческая ошибка. Надо было убить Ритчи в 70м.
guest 14.01.2011 12:48 # +3
Изобретите машину времени и исправьте эту досадную ошибку. :D
guest 14.01.2011 12:56 # −1
>На самом деле Паскаль, как язык, превосходит Си/Си++ во всех отношениях
Вывод из ваших слов:
Си++ - УГешное УГ?
:D
TarasB 14.01.2011 11:42 # 0
TarasB 14.01.2011 13:20 # +2
absolut 12.01.2011 18:37 # +1
Тем более, что это не требуется. Если нужен конкретный символ, то его и следует проверить, обычным символьным сравнением, а не через ascii-коды. А если нужен диапазон, то в адекватных случаях используются функции, о которых я говорил выше.
Такие же варианты как в ГК или в твоем примере изобилуют магическими числами, что не есть гуд.
TarasB 12.01.2011 18:56 # −2
absolut 12.01.2011 19:08 # 0
xXx_totalwar 12.01.2011 19:29 # −2
absolut 12.01.2011 21:22 # +1
Инварианты такие от лукавого, особенно для символов, не принадлежащих латинице.
guest 13.01.2011 03:59 # −1
1)Есть ли такие языки, где это реализовано, при этом для различных лингвистических языков и для разных платформ?
2)Как выглядит такой инвариант при сравнении, скажем, 'а' и 'A' или латинской 'A' и русской 'А'?
(xXx_totalwar, Вы, наверное, помните о моём хобби, поэтому знаете, что мне это может пригодиться. :)
xXx_totalwar 13.01.2011 15:42 # 0
в лингвистике как бы не поощряется рассуждать. это вполне формально определенная область.
1) конечно есть. любой язык имеющий алфавит (с логографией отдельные истории). все идет с времен зарождения письменностей, когда литерам соответствовали еще и числовые значения. следовательно, порядок следования важен или господа отрицают, что числовые множества обладают отношением порядка?
странно, что многие не стесняясь называющие себя программистами, не знают даже тривиальных основ лингвистики.
2) по большому счету эти величины не могут быть сравнимы, т.к. принадлежат разным множествам. но на практике это может быть реализовано, например в соответствии с ISO-14651 / DUCET
guest 13.01.2011 16:05 # −1
Вы же понимаете, что я жду примера языка программирования, где реализован данный порядок?
xXx_totalwar 13.01.2011 16:14 # 0
guest 13.01.2011 16:20 # +1
>'a' < 'b' && 'b' < 'c'
2)Подобное сравнение верно и для национальных алфавитов на всех платформах?
xXx_totalwar 13.01.2011 16:29 # −1
2) проблемы разработчиков платформ. если не способны для алфавита реализовать отношение порядка, нечего им в этой профессии ошиваться.
guest 13.01.2011 16:31 # +1
Насколько я помню, в стандарте языка Си это не указано, значит не верное.
xXx_totalwar 13.01.2011 16:41 # 0
Dummy00001 13.01.2011 17:00 # 0
В С 'a'/'b'/etc это есть просто целочисленные константы, со значением соответствующим коду символа в ASCII. (В С++ - char константы, но с тем же значением.)
guest 13.01.2011 17:45 # −1
Верно лишь утверждение 1)
2)ое не верно, т к для национальных алфавитов аски не стандартизирует такое.
Dummy00001 13.01.2011 18:22 # 0
верно, потому что по стандарту ты и не можешь написать например 'ё'. С и С++ гарантируют только ASCII. в новых версиях языков для этого есть U'~'/L'~' (U'' - 32bit Unicode, L'' - 16bit Unicode).
Для С, смотри в стандарте 6.4.4.4 - Character constants. Для С++ - 2.14.3 - Character literals. К слову, рекомендую почитать, сам много нового узнал ;)
guest 13.01.2011 18:34 # −1
Что-то мне кажется, что могу.
Даже если не могу, но в char лежит "йо" и мне его надо сравнить с другими символами, то что тогда? Где выполняется?
Или Вы предлагаете выкинуть интернациональные кодовые страницы только из-за того, что в Си по стандарту только ASCII?
pushkoff 13.01.2011 17:23 # +2
xXx_totalwar 13.01.2011 17:27 # 0
guest 13.01.2011 17:46 # −1
Dummy00001 13.01.2011 17:35 # 0
pushkoff 14.01.2011 00:35 # 0
guest 14.01.2011 00:46 # −1
pushkoff 14.01.2011 00:47 # 0
absolut 14.01.2011 00:56 # 0
Dummy00001 14.01.2011 01:16 # 0
ЗЫ гугл, искать "мак буква ё" - альтернативная раскладка с буквой ё.
pushkoff 16.01.2011 14:23 # 0
TarasB 12.01.2011 20:35 # −3
shm 12.01.2011 20:48 # +4
guest 13.01.2011 03:50 # −1
shm 12.01.2011 18:39 # +1
Govnoeb 12.01.2011 13:55 # 0
а так на говнокод не тянет. задора нет
Dummy00001 12.01.2011 16:31 # 0
ну и самое главное достижение этого кода: превращение utf-8 в мусор. как собственно этот шедевр и попал мне на радар.
ctm 17.01.2011 21:49 # +1
bugmenot 17.01.2011 22:03 # 0
istem 17.01.2011 23:05 # −1
> - ??!
o_O
Планету Нибиру на говнокод, срочно!
bugmenot 17.01.2011 23:18 # 0
istem 17.01.2011 23:24 # 0
А я-то, наивный, всю сознательную жизнь думал, что 0°K - это абсолютный ноль, так сказать...