Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2009, 19:37   #1
Бурундук
Пользователь
 
Аватар для Бурундук
 
Регистрация: 13.10.2009
Сообщений: 21
По умолчанию Delpi-перекодировка

"Составить модуль перекодировки русских символов консольных приложений в среде Delphi".
Я не совсем понял,что от меня хотят...как ЭТО должно работать...
Код:
function Rus(mes: string):string;
var
i: integer; 
begin
 for i: =1 to length(mes) do case mes[i] of
 'A'..'п' :mes[i] := Chr(Ord(mes[i])-64);
 'р'..'я' :mes[i] := Chr(Ord(mes[i])-16); 
end;
rus := mes;
end;
в этом есть смысл?
Бурундук вне форума Ответить с цитированием
Старый 18.10.2009, 20:19   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Да, скорее всего этого от Вас и хотели. Ну только проверьте, правильные ли константы 64 и 16, я на вскидку не помню
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 18.10.2009, 20:55   #3
Бурундук
Пользователь
 
Аватар для Бурундук
 
Регистрация: 13.10.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Да, скорее всего этого от Вас и хотели. Ну только проверьте, правильные ли константы 64 и 16, я на вскидку не помню
А почему не работает ...?
Бурундук вне форума Ответить с цитированием
Старый 18.10.2009, 21:22   #4
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

это что, из за проблем с русскими символами? смари здесь http://forum.ixbt.com/topic.cgi?id=26:39262
lennon вне форума Ответить с цитированием
Старый 21.08.2010, 03:34   #5
Беллая
Пользователь
 
Аватар для Беллая
 
Регистрация: 30.07.2010
Сообщений: 44
По умолчанию Хотелось бы проработать эту тему

Могу ли я продолжить эту тему? У меня тоже есть проблема с выводом на экран русского текста. Я новичок. В качестве своей первой программы пишу сложную правда консольную программу. Математику на паскаль переводить надо. Поэтому в интернете искала готовую подпрограммку-руссификатор. Нашла точно такую, что указана в этой теме.
"Вопрос почему не работает?" - тоже мой вопрос. Я создаю консольную программу, мне этот простой вариант подошёл бы. Но программа выдаёт ошибку; Duplicate case label - значения в операторе CASE повторяются.
Вот сама функция
Код:
// Функция Rus преобразует ANSI'-строку в ASCII-строку 
function Rus(mes: string):string; 
// В ANSI русские буквы кодируются числами от 192 до 255, 
// в ASCII - от 128 до П5 (А..Яа..п) и от 224 до 239 (р. .я) . 
var
i: integer; // номер обрабатываемого символа 
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п' : mes[i] := Chr(Ord(mes[i]) - 64); 
'p'..'я' : mes[i] := Chr(Ord(mes[i]) - 16); 
end; 
rus := mes; 
end;
Разбираться с case буду завтра. сегодня только спрашиваю можно ли продолжить тему и прошу исправить ошибку в слове Delpi
Say we can do it together

Последний раз редактировалось Беллая; 21.08.2010 в 04:10. Причина: Уточнение
Беллая вне форума Ответить с цитированием
Старый 21.08.2010, 08:03   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Господа, все это обсуждалось неоднократно
Посему ставлю жирную точку над "и"
Код:
uses
  SysUtils;
var s:string;
 function RusTextToConsole(s:string):string;
  var i:longint;
  begin
  for i:=1 to length(s) do
  begin
   if ord(s[i]) in [192..239] then s[i]:=chr(ord(s[i])-64);
   if ord(s[i]) in [240..255] then  s[i]:=chr(ord(s[i])-16);
  end;
  result:=s
  end;

begin
 s:='привет мир';

 write(RusTextToConsole(s));readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2010, 09:01   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если речь идёт о Delphi, то можно не заниматься перекодировкой символов из одной кодовой таблицы (ANSI) в другую (OEM, она же DOS, она же 866). Можно смело доверить этот сложный процесс самой Винде. Рекомендую:
Код:
program StrAnsiToOem;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;

function StrAnsiToOem(const S: AnsiString): AnsiString;
begin
  SetLength(Result, Length(S));
  AnsiToOemBuff(@S[1], @Result[1], Length(S));
end;

begin
  WriteLn(StrAnsiToOem('Теперь в консоли всё будет по русски!'));
  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2010, 11:12   #8
Беллая
Пользователь
 
Аватар для Беллая
 
Регистрация: 30.07.2010
Сообщений: 44
По умолчанию Спасибо вам, Serge Blizykov и Stilet

Получилось здорово!

Р.S. Теперь не стыдно руководителю работ показывать.

Спасибо за помощь ещё раз.
Вложения
Тип файла: rar Вывод на экран.rar (21.1 Кб, 12 просмотров)
Say we can do it together
Беллая вне форума Ответить с цитированием
Старый 21.08.2010, 12:35   #9
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от Беллая Посмотреть сообщение
У меня тоже есть проблема с выводом на экран русского текста. пишу сложную правда консольную программу.
Уже на этом форуме публиковал однажды предложение по этому вопросу. Вот еще раз повторюсь:

Код:
function PR(Const a : string) : string;
begin
  SetLength(result, length(a));
  CharToOem(PChar(a), Pchar(result));
end;
пример вызова функции
Код:
writeln(PR('Введите координату (x,y) вершины '),i);
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 21.08.2010, 13:27   #10
Беллая
Пользователь
 
Аватар для Беллая
 
Регистрация: 30.07.2010
Сообщений: 44
По умолчанию

Возьму ваш вариант на заметку. Спасибо, Grad.

Со своей стороны обещаю в следующий раз внимательней по форуму содержание тем просматривать.

P.S. Как время по-больше будет - разберусь в сути того, что написано в предложенных вариантах, вроде это даже мне под силу; напопробую все. Пока просто запишу в мою программу самый простой, с моей точки зрения.
Say we can do it together
Беллая вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перекодировка алфавита world12_tk Помощь студентам 6 20.07.2009 22:40
Перекодировка или вирус!!! muran Помощь студентам 3 25.02.2009 08:33
Перекодировка из ASCII Dimo444ka Помощь студентам 2 25.05.2008 13:22
создание БД Access в Delpi и проблема!!! bmb_66 БД в Delphi 4 02.01.2008 10:48