On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение





Пост N: 21
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 17.11.08 10:11. Заголовок: Поднять регистр русских букв


Простите уважаемые коллеги по цеху за возможно избитый вопрос.
Как поднять регистр русских букв в xHarbour?
В Harbour это делается легко, но не хочется перелопачивать код под него...
Т.е. делаю

 цитата:
REQUEST HB_CODEPAGE_RU866
HB_SETCODEPAGE('RU866')


и UPPER() поднимает символы, а в xHarbour это не происходит.
Некоторые пользуются функцией XUPPER().
И я тоже буду скорее всего, но подумал, может я не догоняю чего нибудь...
Помогите, плиз...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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) // работает

Как подавить эту оптимизацию, я пока не нашел
Написал в группу

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1079
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.11.08 12:11. Заголовок: Pasha пишет: Написа..


Pasha пишет:

 цитата:
Написал в группу


Функцию CurDir() так и не починили , хотя ранее работала верно.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1080
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.11.08 12:19. Заголовок: Pasha пишет: hb_Set..


Pasha пишет:

 цитата:
hb_SetCodepage( "RU866" )


Этого не достаточно , так как не работает.
Перед этой строкой добавляем
REQUEST HB_CODEPAGE_RU866

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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()


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1032
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.11.08 12:33. Заголовок: Dima пишет: Этого н..


Dima пишет:

 цитата:
Этого не достаточно , так как не работает.
Перед этой строкой добавляем
REQUEST HB_CODEPAGE_RU866



это само собой разумеется, я просто не включил в копипаст

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1081
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.11.08 18:21. Заголовок: Pasha я так понял ч..


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

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 19.11.08 09:21. Заголовок: Pasha пишет: Это не..


Pasha пишет:

 цитата:
Это неприятный сюрприз.


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

Спасибо: 0 
Цитата Ответить
Администратор




Пост N: 1033
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.11.08 10:44. Заголовок: MMK пишет: Это не с..


MMK пишет:

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



Как не работала ? Если установить кодовую страницу RU1251, то все работает
А эту оптимизацию для строковых констант ввел Рон в августе 7-го года. Он добился совместимости с клиппером для редкого случая с операцией '$', и при этом сознательно нарушил работу Upper
Он пока не откликается
Если не откликнется, то прийдется ввести в компилятор какой-нибудь флажок вроде -kU,
чтобы забить это счастье



Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 19.11.08 12:08. Заголовок: Pasha пишет: Как не..


Pasha пишет:

 цитата:
Как не работала ? Если установить кодовую страницу RU1251, то все работает


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

Спасибо: 0 
Цитата Ответить
Администратор




Пост 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})


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 22
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 20.11.08 11:12. Заголовок: Pasha пишет: Если ж..


Pasha пишет:

 цитата:
Если же помечтать



Ух ты ... А мне нравится эта мечта...

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 212
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет