OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 13 Декабрь, 2019 02:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: глюк встроенной функции CAP
СообщениеДобавлено: Суббота, 30 Октябрь, 2010 16:21 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2639
Откуда: Россия, Ярославль
В документации к языку написано, что функция конвертирует только символы из 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.

наверное, тема относится к русификации в большей мере


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: глюк встроенной функции CAP
СообщениеДобавлено: Суббота, 30 Октябрь, 2010 16:39 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Пётр Кушнир писал(а):
В документации к языку написано, что функция конвертирует только символы из Latin-1. Следовательно, стоит ожидать, что символы вне Latin1 она не изменит.
Цитата:
Name - CAP(x)
Function - x is a Latin-1 letter: corresponding capital letter
я бы трактовал так: если "x is a Latin-1 letter", то результат "corresponding capital letter". Про ~"x is a Latin-1 letter" ничего, т.е. ожидать чего-то определённого не следует.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: глюк встроенной функции CAP
СообщениеДобавлено: Суббота, 30 Октябрь, 2010 16:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2933
Откуда: г. Ярославль
Значит, пользоваться встроенной функцией CAP(x) можно, только убедившись в том, что x в диапазоне Latin-1. Иначе пользоваться ей нельзя.

Какая-то бесполезная функция получается. Лучше бы её не было совсем, чем в таком виде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: глюк встроенной функции CAP
СообщениеДобавлено: Суббота, 30 Октябрь, 2010 16:47 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Иван Кузьмицкий писал(а):
Какая-то бесполезная функция получается. Лучше бы её не было совсем, чем в таком виде.
Полезная только для латиноязычных. Т.е. в общем, согласен с Вами, --- бесполезна. я просто не обращаю внимания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: глюк встроенной функции CAP
СообщениеДобавлено: Суббота, 30 Октябрь, 2010 17:14 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2639
Откуда: Россия, Ярославль
Иван Кузьмицкий писал(а):
Значит, пользоваться встроенной функцией CAP(x) можно, только убедившись в том, что x в диапазоне Latin-1.
так и придётся поступить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: глюк встроенной функции CAP
СообщениеДобавлено: Понедельник, 06 Декабрь, 2010 14:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2318
Откуда: Россия, Томск
Разбор функции CAP для ETH Oberon и XDS: viewtopic.php?p=55048#p55048
Не смог воспроизвести проблему в чистом ББ 1.5 и школьной сборке от октября 2010.
CAP отлично работает с русскими буквами, за исключением пары ё/Ё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: глюк встроенной функции CAP
СообщениеДобавлено: Понедельник, 06 Декабрь, 2010 15:47 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2318
Откуда: Россия, Томск
Скопировал приведённый выше модуль PrivTest из браузера, вставил в ББ 1.5 (Edit - Paste Special - Plain Text), скомпилировал, выполнил. Результат:
Код:
ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
Разница в длине строк взялась из-за отсутствия буквы "й" в строке из строчных букв, см. исходник модуля.

Вердикт: что-то у вас с кодировками при вводе исходного текста напутано. Функция CAP отлично работает с русскими буквами (кроме ё). Хотя, может портить другие символы. Например, превращает "{" в "[" и т.п.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB