izhevsk.ru Главная /  Программирование /  Русский язык в консоли в Delphi. Подскажите, что тут не так?
тема закрыта

Имя:
Пароль:
 зарегистрироваться | Войти через
напоминатель пароля
Русский язык в консоли в Delphi. Подскажите, что тут не так?
НОВАЯ ТЕМА правила | поиск | картинки | | | о форуме |
  Новости | Авто | Недвижимость | Работа | Бизнес | Стройка | Объявления | Совместная покупка | | |
  следующая тема | предыдущая тема
Автор Тема:   Русский язык в консоли в Delphi. Подскажите, что тут не так?   версия для печати
Kaprice_P
Рейтинг: 40/-37
-- написано 3-12-2011 20:04 Kaprice_P

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils, Windows;

const rSmall:string='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
rBig:string='АБВГДЕЁЖЗИКЛМНОПРСТУФХЧЦШЩЪЫЬЭЮЯ';
var M,P,Q,N,i:integer;
b,id,tmp:string;
function Rus(mes: string):string;
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
var
i: integer; // номер обрываемого символа
begin
SetLength(Result,length(mes));
for i:=1 to length(mes) do
case mes[i] of
'А'..'п' :Result := Chr(Ord(mes[i]) - 64);
'р'..'я' :Result := Chr (Ord(mes[i] ) -16);
else Result:=mes[i];
end;
end;
BEGIN
randomize;
M:=12;
write('vvedite identifikator:');
readln(id);
N:=length(id);
if n=0 then
begin
Q:=0;
P:=0;
end
else
begin
Q:=trunc(exp(3*ln(N))) mod 5;
P:=trunc(exp(2*ln(N))) mod 6;
end;
b:='';
i:=1;
while(i<=Q+1)do
begin
b:=concat(b,rSmall[1+trunc(random*length(rSmall))]);
inc(i,1);
end;
while(i<=Q+P+1) do
begin
b:=concat(b,rBig[1+trunc(random*length(rBig))]);
inc(i,1);
end;
while (i<=M) do
begin
str(trunc(random*10),tmp);
b:=concat(b,tmp);
inc(i,1);
end;
writeln('N=',N,' Q=',Q,' P=',P);
writeln('password:',b);
readln;
{ TODO -oUser -cConsole Main : Insert code here }
END.

Показать текст сообщения полностью
Flk
Рейтинг: 9/-5
-- написано 3-12-2011 21:46 Flk

Что написала - то и получила Вопрос-то в чём? Получить русские буквы в консольном выводе? Тогда смотри функцию CharToOem(). Или почему твоя русификация не работает? Так функция Rus() в коде не вызывается.
Kaprice_P
Рейтинг: 40/-37
-- написано 3-12-2011 22:24 Kaprice_P

я так понимаю вот так записать:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,windows;
var
welcome : PAnsiChar; // или PChar
begin
try
CharToOem('Привет!', welcome);
Writeln(welcome);
ReadLn
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
Azgaroth
Рейтинг: 0/0
-- написано 4-12-2011 15:23 Azgaroth

Если хочется использовать именно свою функцию, то её правильную реализацию стоит посмотреть здесь, например: http://reslib.com/book/Delphi_6__Programmirovanie_na_Object_pascal#128

code:

function Rus(mes: string):string;
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
var
i: integer; // номер обрываемого символа
begin
for i := 1 to length(mes) do
case mes[i] of
'А'..'п' : mes[i] := Chr(Ord(mes[i]) - 64);
'р'..'я' : mes[i] := Chr(Ord(mes[i]) - 16);
end;
Result := mes;
end;

А затем вызывать в коде:

Writeln(Rus('Привет!'));


Если использовать CharToOem, то в простейшем случае можно написать:

code:

var
msg, source : string;
begin
source := 'Привет';
SetLength(msg, length(source));
CharToOem(PChar(source), PChar(msg));
Writeln(msg);
end.

(Правда, проверить нет возможности, компилятора Delphi под рукой давненько нет)

Kaprice_P
Рейтинг: 40/-37
-- написано 5-12-2011 12:58 Kaprice_P

ммм.....конечно это всё работает, но у меня проблемка в другом:
const rSmall:string='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
rBig:string='АБВГДЕЁЖЗИКЛМНОПРСТУФХЧЦШЩЪЫЬЭЮЯ';
эти константы у меня выводит в виде всяких крюкозябликов с точками и черточками
Flk
Рейтинг: 9/-5
-- написано 5-12-2011 13:37 Flk

Перед выводом их тоже надо конвертировать в кодировку консоли.

200x150 320x240 400x300 800x600    без переносов   
быстрый ответ   

подпись
следующая тема | предыдущая тема

Главная /  Программирование /  Русский язык в консоли в Delphi. Подскажите, что тут не так? форумы izhevsk.ru

 
 
 
 
 
© ООО "Марк" 2020
 
Интернет-провайдер КК МАРК-ИТТ