Автор | Сообщение |
|
| |
Пост N: 21
Зарегистрирован: 31.05.07
|
|
Отправлено: 17.11.08 10:11. Заголовок: Поднять регистр русских букв
Простите уважаемые коллеги по цеху за возможно избитый вопрос. Как поднять регистр русских букв в xHarbour? В Harbour это делается легко, но не хочется перелопачивать код под него... Т.е. делаю цитата: | REQUEST HB_CODEPAGE_RU866 HB_SETCODEPAGE('RU866') |
| и UPPER() поднимает символы, а в xHarbour это не происходит. Некоторые пользуются функцией XUPPER(). И я тоже буду скорее всего, но подумал, может я не догоняю чего нибудь... Помогите, плиз...
|
|
|
Ответов - 11
[только новые]
|
|
|
| Администратор
|
Пост N: 1030
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.11.08 12:08. Заголовок: Это неприятный сюрпр..
Это неприятный сюрприз. Вскрытие показало, что шаловливый компилятор xHarbour, вместо того, чтобы вставить в пи-код вызов функции Upper, сам переводит строку-литерал в верхний/нижний регистр, естественно, по правилам буржуинского языка. Local c := 'abc_абвгд' hb_SetCodepage( "RU866" ) ? hb_SetCodepage() ? Upper('abc_абвгд') // не работает ? Upper(c) // работает Как подавить эту оптимизацию, я пока не нашел Написал в группу
|
|
|
|
| |
Пост N: 1079
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.11.08 12:11. Заголовок: Pasha пишет: Написа..
Pasha пишет: Функцию CurDir() так и не починили , хотя ранее работала верно.
|
|
|
|
| |
Пост N: 1080
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.11.08 12:19. Заголовок: Pasha пишет: hb_Set..
Pasha пишет: цитата: | hb_SetCodepage( "RU866" ) |
| Этого не достаточно , так как не работает. Перед этой строкой добавляем REQUEST HB_CODEPAGE_RU866
|
|
|
|
| Администратор
|
Пост N: 1031
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.11.08 12:31. Заголовок: нашел, когда такая _..
нашел, когда такая _полезная_ фича была внесена в компилятор: 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()
|
|
|
|
| Администратор
|
Пост N: 1032
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.11.08 12:33. Заголовок: Dima пишет: Этого н..
Dima пишет: цитата: | Этого не достаточно , так как не работает. Перед этой строкой добавляем REQUEST HB_CODEPAGE_RU866 |
| это само собой разумеется, я просто не включил в копипаст
|
|
|
|
| |
Пост N: 1081
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.11.08 18:21. Заголовок: Pasha я так понял ч..
Pasha я так понял что исправлять это не будут ?
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.11.08 09:21. Заголовок: Pasha пишет: Это не..
Pasha пишет: Это не сюрприз, Паша :) В хХарборе ф-ция Upper ( для Ansi) не работала с самого рождения. Вследствии чего в FW даже появилась ф-я AnsiUpper. Но и она :( Поэтому используются свои.
|
|
|
|
| Администратор
|
Пост N: 1033
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.11.08 10:44. Заголовок: MMK пишет: Это не с..
MMK пишет: цитата: | Это не сюрприз, Паша :) В хХарборе ф-ция Upper ( для Ansi) не работала с самого рождения. Вследствии чего в FW даже появилась ф-я AnsiUpper. Но и она :( Поэтому используются свои. |
| Как не работала ? Если установить кодовую страницу RU1251, то все работает А эту оптимизацию для строковых констант ввел Рон в августе 7-го года. Он добился совместимости с клиппером для редкого случая с операцией '$', и при этом сознательно нарушил работу Upper Он пока не откликается Если не откликнется, то прийдется ввести в компилятор какой-нибудь флажок вроде -kU, чтобы забить это счастье
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.11.08 12:08. Заголовок: Pasha пишет: Как не..
Pasha пишет: цитата: | Как не работала ? Если установить кодовую страницу RU1251, то все работает |
| Была проблема. Ну, а Рон сделал оптимизацию. А с FW на тот момент работал народ использующий Ansi and Oem :) вот вопросик и выплыл. На самом деле пришлось добавить даже несколько функций. А решение может быть любое - от флажка до собственной ф-ции :)) Были бы все такие проблемы :)))
|
|
|
|
| Администратор
|
Пост N: 1034
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.11.08 21:08. Заголовок: Я подумал, а стоит л..
Я подумал, а стоит ли затевать это добавление нового флага для компилятора ? Достаточно закомментировать в include/hbexprb.c строки 1720-1741, чтобы прибить эту оптимизацию Если же помечтать, то хорошо бы добавить флаг компиляции /cdp=<codepage>, собирать компилятор с библиотекой codepage, и тогда стала бы возможной не только оптимизация upper, но и поддержка национальных идентификаторов, полей таблиц и имен свойств/методов Компиляция: harbour -cdp=ru866 ... и: Function main() Local Сумма := 0 ... use table new dbEval({|| Сумма += table->Поле1})
|
|
|
|
| |
Пост N: 22
Зарегистрирован: 31.05.07
|
|
Отправлено: 20.11.08 11:12. Заголовок: Pasha пишет: Если ж..
Pasha пишет: Ух ты ... А мне нравится эта мечта...
|
|
|
|