Проблемы с руским языком в pascal

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Проблемы с руским языком в pascal

Сообщение red_general » 16.07.2013 20:57:41

Изучаю pascal по книге "Песни о Паскале".
В разделе 'А слабо?' нужно было написать функцию для
определения позиции символа в строке. Я написал её и протестировал в программе на английском слове dog. Искомая буква "о".
Программа вывела 2. Ввожу слово "собака". Искомая буква "о". Пишет 0. Причём такое во всех русских словах и при любых операциях
с ними, когда нужно вывести результат работы вместо букв выводится знак вопроса в ромбе, но при этом если написать просто writeln('Привет мир');,то
русские буквы выводятся нормально. Использую ubuntu 12.04 LTS.Вот исходный код:
Код: Выделить всё
VAR WORD:STRING;
   CHR:STRING;

FUNCTION FINDCAHR(STR:STRING;LETR:STRING):INTEGER;
VAR NUM:INTEGER;
BEGIN
   FINDCAHR:=0;
   FOR NUM:=1 TO LENGTH(STR)
      DO BEGIN
         IF STR[NUM] = LETR THEN FINDCAHR:=NUM;
      END;
END;

BEGIN
   WRITE('ВВЕДИТЕ ТЕКСТ>');
   READLN(WORD);
   WRITE('ВВЕДИТЕ ИСКОМЫЙ СИМВОЛ>');
   READLN(CHR);
   WRITELN(FINDCAHR(WORD,CHR));
END.

В чём может быть дело?
red_general
незнакомец
 
Сообщения: 2
Зарегистрирован: 16.07.2013 20:29:48

Re: Проблемы с руским языком в pascal

Сообщение VirtUX » 16.07.2013 21:21:42

Для начала нужно знать, что не латинские символы помещаются в 2 байта или более байт каждый в кодировке UTF8. Поэтому следует для начала почитать про эту кодировку, т.к. FPC исполдьзует ее.
Отсюда следует, что "STR[NUM] = LETR" всегда будет равно нулю, если "LETR" - это не латиница.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблемы с руским языком в pascal

Сообщение red_general » 16.07.2013 21:34:04

И как мне исправить это?
Я хочу чтобы просто было проведено сравнение текущего символа с искомым символом
и если этот символ соответствует, то вернуть значение локальной переменной NUM.
red_general
незнакомец
 
Сообщения: 2
Зарегистрирован: 16.07.2013 20:29:48

Re: Проблемы с руским языком в pascal

Сообщение VirtUX » 17.07.2013 02:01:00

Чтобы помочь Вам, а не сделать за Вас - дайте ответ на несколько вопросов-намеков ;)
Итак...
1. Вы хотите возвращать номер позиции вхождения, которое будет последним в исходной строке?
Т.е.: в "abcabc" Вы хотите вернуть номер вхождения "b" равным 2 или 5?
2. В какой кодировке Вы решили использовать строки? (От этого зависит какие использовать функции)
3. Word - зарезервированное слово, определяющее тип данных. Chr - имя функции. Что может произойти (не в данном примере) неприятного?
P.S. Как дадите ответы на вопросы, то можете сами корректировать свой код по ходу мысли, или задавайте следующие вопросы...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблемы с руским языком в pascal

Сообщение amateur » 17.07.2013 02:18:41

http://wiki.freepascal.org/LCL_Unicode_Support/ru почитайте это. Особое внимание - Работа со строками и символами UTF-8

VirtUX :twisted:
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Проблемы с руским языком в pascal

Сообщение SSerge » 17.07.2013 04:42:45

VirtUX писал(а): UTF8. Поэтому следует для начала почитать про эту кодировку, т.к. FPC исполдьзует ее


Врёте, дражайший. )) FPC по умолчанию вообще не имеет понятия ни о каких кодировках. UTF8 по умолчанию - это к настройкам Linux Ubuntu, а то и остальных современных линуксов.

Автор темы, поставь Windows, если нужно дословное повторение "песен о паскале".
Либо вариант №2 - настрой линукс так, чтобы кодировкой консоли у него была cp866 - вариант заведомо ущербный и глючный. Опять же - всё ради "песен о паскале" ))

amateur писал(а):http://wiki.freepascal.org/LCL_Unicode_Support/ru почитайте это. Особое внимание - Работа со строками и символами UTF-8


Вообще то это подход и библиотека лазаруса, а не FPC. В FPC релизных версий (вот сюрприз!) вообще нет адекватной поддержки UTF8. А в нестабильной ветке работа с кириллицей и прочей национальщиной теоретически должна производиться с использованием внутренней кодировки типов UnicodeStrings | UnicodeChar, и сей подход напрямую противоречит существующим лазарусам, причем технически.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Проблемы с руским языком в pascal

Сообщение VirtUX » 17.07.2013 10:20:50

SSerge писал(а):Врёте, дражайший. )) FPC по умолчанию вообще не имеет понятия ни о каких кодировках.

изучаем внимательно проблему вопроса:
red_general писал(а):Ввожу слово "собака". Искомая буква "о". Пишет 0.

теперь думаем - с чего бы это?
Я не говорю за весь FPC в общем и в отдельности под разными ОС! Пытаемся разобраться и научиться понимать проблему в конкретном вопросе, на конкретной ОС. Согласен, что не корректно сказал - как-то размыто. Надо было: "Ваш FPC работает с UTF8".

Добавлено спустя 1 минуту 32 секунды:
amateur писал(а):почитайте это

почитайте суть вопроса ;)
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблемы с руским языком в pascal

Сообщение amateur » 17.07.2013 12:12:29

суть, а х.з. в чем суть :lol:

SSerge - ну че вы так предвзято к строкам относитесь :lol: . Нормально они работают, токо специфично. Кстати: red_general не указал то на чем он делает тесты. Дык тут не вариант что на фпс.

Книгу не читал, просматривал. Человеку, насколько я понял, нужно найти "где сидит фазан". Ну я и "пхнул" :) туда где "как приблизительно сидит фазан".
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Проблемы с руским языком в pascal

Сообщение Paster Fob » 17.07.2013 15:32:26

red_general для "песен" есть отдельная ветка на форуме. http://freepascal.ru/forum/viewforum.php?f=45
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.


Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru