Страница 1 из 1

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

СообщениеДобавлено: 16.07.2013 20:57:41
red_general
Изучаю 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.

В чём может быть дело?

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

СообщениеДобавлено: 16.07.2013 21:21:42
VirtUX
Для начала нужно знать, что не латинские символы помещаются в 2 байта или более байт каждый в кодировке UTF8. Поэтому следует для начала почитать про эту кодировку, т.к. FPC исполдьзует ее.
Отсюда следует, что "STR[NUM] = LETR" всегда будет равно нулю, если "LETR" - это не латиница.

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

СообщениеДобавлено: 16.07.2013 21:34:04
red_general
И как мне исправить это?
Я хочу чтобы просто было проведено сравнение текущего символа с искомым символом
и если этот символ соответствует, то вернуть значение локальной переменной NUM.

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

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

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

СообщениеДобавлено: 17.07.2013 02:18:41
amateur
http://wiki.freepascal.org/LCL_Unicode_Support/ru почитайте это. Особое внимание - Работа со строками и символами UTF-8

VirtUX :twisted:

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

СообщениеДобавлено: 17.07.2013 04:42:45
SSerge
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, и сей подход напрямую противоречит существующим лазарусам, причем технически.

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

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

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

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

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

почитайте суть вопроса ;)

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

СообщениеДобавлено: 17.07.2013 12:12:29
amateur
суть, а х.з. в чем суть :lol:

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

Книгу не читал, просматривал. Человеку, насколько я понял, нужно найти "где сидит фазан". Ну я и "пхнул" :) туда где "как приблизительно сидит фазан".

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

СообщениеДобавлено: 17.07.2013 15:32:26
Paster Fob
red_general для "песен" есть отдельная ветка на форуме. http://freepascal.ru/forum/viewforum.php?f=45