Форум » [x]Harbour » Поднять регистр русских букв » Ответить

Поднять регистр русских букв

spair2k: Простите уважаемые коллеги по цеху за возможно избитый вопрос. Как поднять регистр русских букв в xHarbour? В Harbour это делается легко, но не хочется перелопачивать код под него... Т.е. делаю [quote]REQUEST HB_CODEPAGE_RU866 HB_SETCODEPAGE('RU866')[/quote] и UPPER() поднимает символы, а в xHarbour это не происходит. Некоторые пользуются функцией XUPPER(). И я тоже буду скорее всего, но подумал, может я не догоняю чего нибудь... Помогите, плиз...

Ответов - 11

Pasha: Это неприятный сюрприз. Вскрытие показало, что шаловливый компилятор xHarbour, вместо того, чтобы вставить в пи-код вызов функции Upper, сам переводит строку-литерал в верхний/нижний регистр, естественно, по правилам буржуинского языка. Local c := 'abc_абвгд' hb_SetCodepage( "RU866" ) ? hb_SetCodepage() ? Upper('abc_абвгд') // не работает ? Upper(c) // работает Как подавить эту оптимизацию, я пока не нашел Написал в группу

Dima: Pasha пишет: Написал в группу Функцию CurDir() так и не починили , хотя ранее работала верно.

Dima: Pasha пишет: hb_SetCodepage( "RU866" ) Этого не достаточно , так как не работает. Перед этой строкой добавляем REQUEST HB_CODEPAGE_RU866


Pasha: нашел, когда такая _полезная_ фича была внесена в компилятор: 2007-08-28 14:55 UTC-0500 Ron Pinkas <ron/at/xharbour.com> * source\common\expropt2.c * source\common\hbstr.c * Reverted errornous last commit * include\hbexprb.c + Enabled compile time optimization of Upper() to match some side effect of Clipper /* This is required for strict compatability with Clipper f.e.: ? Upper( "" ) $ "" but this may cause codepage related issues. We need someone with internationalization experience to review this. Note: Clipper is producing inconsistent resutls due to this optimization, f.e.: LOCAL c := Upper( "" ) ? c $ "" //.F. ? Upper( "" ) $ "" //.T. and so we might also decide to prefer consistency over strict compatability. */ * source\vm\macro.c ! Fixed support for nested macros in hb_macroGetValue()

Pasha: Dima пишет: Этого не достаточно , так как не работает. Перед этой строкой добавляем REQUEST HB_CODEPAGE_RU866 это само собой разумеется, я просто не включил в копипаст

Dima: Pasha я так понял что исправлять это не будут ?

MMK: Pasha пишет: Это неприятный сюрприз. Это не сюрприз, Паша :) В хХарборе ф-ция Upper ( для Ansi) не работала с самого рождения. Вследствии чего в FW даже появилась ф-я AnsiUpper. Но и она :( Поэтому используются свои.

Pasha: MMK пишет: Это не сюрприз, Паша :) В хХарборе ф-ция Upper ( для Ansi) не работала с самого рождения. Вследствии чего в FW даже появилась ф-я AnsiUpper. Но и она :( Поэтому используются свои. Как не работала ? Если установить кодовую страницу RU1251, то все работает А эту оптимизацию для строковых констант ввел Рон в августе 7-го года. Он добился совместимости с клиппером для редкого случая с операцией '$', и при этом сознательно нарушил работу Upper Он пока не откликается Если не откликнется, то прийдется ввести в компилятор какой-нибудь флажок вроде -kU, чтобы забить это счастье

MMK: Pasha пишет: Как не работала ? Если установить кодовую страницу RU1251, то все работает Была проблема. Ну, а Рон сделал оптимизацию. А с FW на тот момент работал народ использующий Ansi and Oem :) вот вопросик и выплыл. На самом деле пришлось добавить даже несколько функций. А решение может быть любое - от флажка до собственной ф-ции :)) Были бы все такие проблемы :)))

Pasha: Я подумал, а стоит ли затевать это добавление нового флага для компилятора ? Достаточно закомментировать в include/hbexprb.c строки 1720-1741, чтобы прибить эту оптимизацию Если же помечтать, то хорошо бы добавить флаг компиляции /cdp=<codepage>, собирать компилятор с библиотекой codepage, и тогда стала бы возможной не только оптимизация upper, но и поддержка национальных идентификаторов, полей таблиц и имен свойств/методов Компиляция: harbour -cdp=ru866 ... и: Function main() Local Сумма := 0 ... use table new dbEval({|| Сумма += table->Поле1})

spair2k: Pasha пишет: Если же помечтать Ух ты ... А мне нравится эта мечта...



полная версия страницы