OberonCore https://forum.oberoncore.ru/ |
|
глюк встроенной функции CAP https://forum.oberoncore.ru/viewtopic.php?f=29&t=2952 |
Страница 1 из 1 |
Автор: | Пётр Кушнир [ Суббота, 30 Октябрь, 2010 16:21 ] |
Заголовок сообщения: | глюк встроенной функции CAP |
В документации к языку написано, что функция конвертирует только символы из Latin-1. Следовательно, стоит ожидать, что символы вне Latin1 она не изменит. Для русских символов была написана примитивная функция "капитализации". однако. Код: MODULE PrivTest; IMPORT Log; PROCEDURE Cap* (ch: CHAR): CHAR; VAR res: CHAR; BEGIN res := CAP(ch); CASE res OF 'а': res := 'А' | 'б': res := 'Б' | 'в': res := 'В' | 'г': res := 'Г' | 'д': res := 'Д' | 'е': res := 'Е' | 'ё': res := 'Ё' | 'ж': res := 'Ж' | 'з': res := 'З' | 'и': res := 'И' | 'й': res := 'И' | 'к': res := 'К' | 'л': res := 'Л' | 'м': res := 'М' | 'н': res := 'Н' | 'о': res := 'О' | 'п': res := 'П' | 'р': res := 'Р' | 'с': res := 'С' | 'т': res := 'Т' | 'у': res := 'У' | 'ф': res := 'Ф' | 'х': res := 'Х' | 'ц': res := 'Ц' | 'ч': res := 'Ч' | 'ш': res := 'Ш' | 'щ': res := 'Щ' | 'ъ': res := 'Ъ' | 'ы': res := 'Ы' | 'ь': res := 'Ь' | 'э': res := 'Э' | 'ю': res := 'Ю' | 'я': res := 'Я' ELSE END; RETURN res END Cap; PROCEDURE CapThis(VAR s: ARRAY OF CHAR); VAR i: INTEGER; BEGIN FOR i:=0 TO LEN(s$)-1 DO s[i]:=Cap(s[i]) END; END CapThis; PROCEDURE Do*; VAR s: ARRAY 128 OF CHAR; BEGIN s:='abcdefghijklmnopqrstuvwxyzабвгдеёжзиклмнопрстуфхцчшщъыьэюя'; CapThis(s); Log.Ln; Log.String(s$); s:='ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; CapThis(s); Log.Ln; Log.String(s$); END Do; END PrivTest. PrivTest.Do на выходе получаем: Код: ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ то есть, похоже, что все символы в {Р .. Я} портятся в CAP. наверное, тема относится к русификации в большей мере |
Автор: | Евгений Темиргалеев [ Суббота, 30 Октябрь, 2010 16:39 ] |
Заголовок сообщения: | Re: глюк встроенной функции CAP |
Пётр Кушнир писал(а): В документации к языку написано, что функция конвертирует только символы из Latin-1. Следовательно, стоит ожидать, что символы вне Latin1 она не изменит. Цитата: Name - CAP(x) я бы трактовал так: если "x is a Latin-1 letter", то результат "corresponding capital letter". Про ~"x is a Latin-1 letter" ничего, т.е. ожидать чего-то определённого не следует.
Function - x is a Latin-1 letter: corresponding capital letter |
Автор: | Иван Кузьмицкий [ Суббота, 30 Октябрь, 2010 16:46 ] |
Заголовок сообщения: | Re: глюк встроенной функции CAP |
Значит, пользоваться встроенной функцией CAP(x) можно, только убедившись в том, что x в диапазоне Latin-1. Иначе пользоваться ей нельзя. Какая-то бесполезная функция получается. Лучше бы её не было совсем, чем в таком виде. |
Автор: | Евгений Темиргалеев [ Суббота, 30 Октябрь, 2010 16:47 ] |
Заголовок сообщения: | Re: глюк встроенной функции CAP |
Иван Кузьмицкий писал(а): Какая-то бесполезная функция получается. Лучше бы её не было совсем, чем в таком виде. Полезная только для латиноязычных. Т.е. в общем, согласен с Вами, --- бесполезна. я просто не обращаю внимания.
|
Автор: | Пётр Кушнир [ Суббота, 30 Октябрь, 2010 17:14 ] |
Заголовок сообщения: | Re: глюк встроенной функции CAP |
Иван Кузьмицкий писал(а): Значит, пользоваться встроенной функцией CAP(x) можно, только убедившись в том, что x в диапазоне Latin-1. так и придётся поступить
|
Автор: | Александр Ильин [ Понедельник, 06 Декабрь, 2010 14:06 ] |
Заголовок сообщения: | Re: глюк встроенной функции CAP |
Разбор функции CAP для ETH Oberon и XDS: viewtopic.php?p=55048#p55048 Не смог воспроизвести проблему в чистом ББ 1.5 и школьной сборке от октября 2010. CAP отлично работает с русскими буквами, за исключением пары ё/Ё. |
Автор: | Александр Ильин [ Понедельник, 06 Декабрь, 2010 15:47 ] |
Заголовок сообщения: | Re: глюк встроенной функции CAP |
Скопировал приведённый выше модуль PrivTest из браузера, вставил в ББ 1.5 (Edit - Paste Special - Plain Text), скомпилировал, выполнил. Результат: Код: ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ Разница в длине строк взялась из-за отсутствия буквы "й" в строке из строчных букв, см. исходник модуля.ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ Вердикт: что-то у вас с кодировками при вводе исходного текста напутано. Функция CAP отлично работает с русскими буквами (кроме ё). Хотя, может портить другие символы. Например, превращает "{" в "[" и т.п. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |