Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Кириллица в латиницу и инверсия регистра.   Найти похожие ветки 

 
Saimon   (2005-01-28 21:34) [0]

Мастера, помогите, плиззз.

Необходимо реализовать в своей проге, чтобы она (прога) умела переводить
кириллицу в латиницу и наоборот. Как это сделать???

И еще надо реализовать возможность инверсии регистра, например, "Delphi" в
"Вудзрш", "PS" в "ЗЫ" и наоборот. Как это сделать???


Заранее, спасибо.


 
ninja ©   (2005-01-28 21:46) [1]

про инверсию регистра: просто прибавляй к коду символа 192. должно работать.

for i:=1 to length(s) do s[i]:=Char(Ord(s[i])+192);


 
ninja ©   (2005-01-28 21:48) [2]

ой, вру я.
надо чтоб из английских получить русские - прибавлять 128, а чтобы наоборот - вычитать.


 
Saimon   (2005-01-29 14:22) [3]

Спасибо, чуть позже проверю...


 
SergP ©   (2005-01-29 14:34) [4]


>  [2] ninja ©   (28.01.05 21:48)
> ой, вру я.
> надо чтоб из английских получить русские - прибавлять 128,
> а чтобы наоборот - вычитать.


Не уверен.... Как я понял автору нужно преобразование символов по "клавиатурному" соответствию.

ИМХО лучше сделать таблицу (массив) для перекодировки.


 
Anatoly Podgoretsky ©   (2005-01-29 14:44) [5]

Saimon   (28.01.05 21:34)  
кириллицу в латиницу и наоборот. Как это сделать???

Простая подстановка по таблице, наоборот не получится, без искуственного интеллекта ни как, да и он буксует.

И еще надо реализовать возможность инверсии регистра, например, "Delphi" в "Вудзрш", "PS" в "ЗЫ" и наоборот.

Простая подстановка по таблице. Работает в обе стороны, две таблицы.


 
Saimon   (2005-01-30 19:19) [6]

???
> ninja ©   (28.01.05 21:46) [1]

Не рабатает, т.е. работает но не правильно.


> Anatoly Podgoretsky ©   (29.01.05 14:44) [5]


Спасиб, а примера нет??


 
Anatoly Podgoretsky ©   (2005-01-30 19:47) [7]

Оно с демо версией, или ты про какой пример спрашиваешь, про таблицы перекодировки, делай по образу и подобию. Индекс массива это код символа, значение это новый код.


 
ninja ©   (2005-01-30 21:28) [8]

действительно, с кодами символов не работает. выдаёт какую-то каку..

А почему, не подскажете?


 
Anatoly Podgoretsky ©   (2005-01-30 21:31) [9]

Ну наверно ошибка в программе.


 
ninja ©   (2005-01-30 21:37) [10]

А, ну да. Теперь работает :)


 
Поручик ©   (2005-01-30 21:43) [11]

Могу таблицей поделиться и функциями, если найду когдато писал нажималку кнопок.


 
Поручик ©   (2005-01-30 21:47) [12]

УРА!!! Нашел

const
 (* Таблицы соответствия английской раскладки и русской *)
 TranslateDownRU: array[0..32] of char=("й","ц","у","к","е","н","г","ш","щ","з","х","ъ",
                                         "ф","ы","в","а","п","р","о","л","д","ж","э",
                                           "я","ч","с","м","и","т","ь","б","ю",".");

 TranslateUpRu:   array[0..32] of char=("Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ",
                                         "Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э",
                                           "Я","Ч","С","М","И","Т","Ь","Б","Ю",",");

 TranslateDownENG: array[0..32] of char=("q","w","e","r","t","y","u","i","o","p","[","]",
                                           "a","s","d","f","g","h","j","k","l",";","""",
                                             "z","x","c","v","b","n","m",",",".","/");

 TranslateUpENG:   array[0..32] of char=("Q","W","E","R","T","Y","U","I","O","P","{","}",
                                            "A","S","D","F","G","H","J","K","L",":",""",
                                            "Z","X","C","V","B","N","M","<",">","?");


А вот и функции, убрать надо correction:

function correction(Ch: Char): Char;
begin
 case ch of
   "ё": result:= "е";
   "Ё": result:= "е";
   ":": result:= "^";
   """: result:= "@";
   ".": result:= ".";
   ",": result:= ",";
   else result:= ch;
 end;
end;

function Translate(Ch: Char): char;
var
 i: integer;
 ch2: char;
begin
 Ch := Correction(Ch);
  for i:=0 to 32 do
   begin
     if TranslateDownRu[i] = ch then
       begin
         ch2 := TranslateDownEng[i];
         break;
       end
     else
       ch2:= ch;
     if TranslateUpRu[i] = ch then
       begin
         ch2 := TranslateUpEng[i];
         break;
       end
     else
       ch2:= ch;
   end;
   result := ch2;
end;


 
rolex   (2005-01-30 21:51) [13]


> Необходимо реализовать в своей проге, чтобы она (прога)
> умела переводить
> кириллицу в латиницу и наоборот. Как это сделать???

Если я правильно понял, то требуется перевести русский в транслит, и наоборот. Для перевода русского в транслит, могу предложить такой код (когда-то давно ещё прогу для себя написал):
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
function TextToTranslit(Text: string): string;
var i:integer;
begin
 for i:=1 to Length(text)*3 do
 begin
   if copy(text,i,1)="а" then begin delete(text,i,1); insert("a",text,i); end;
   if copy(text,i,1)="б" then begin delete(text,i,1); insert("b",text,i); end;
   if copy(text,i,1)="в" then begin delete(text,i,1); insert("v",text,i); end;
   if copy(text,i,1)="г" then begin delete(text,i,1); insert("g",text,i); end;
   if copy(text,i,1)="д" then begin delete(text,i,1); insert("d",text,i); end;
   if copy(text,i,1)="е" then begin delete(text,i,1); insert("e",text,i); end;
   if copy(text,i,1)="ё" then begin delete(text,i,1); insert("e",text,i); end;
   if copy(text,i,1)="ж" then begin delete(text,i,1); insert("zh",text,i); end;
   if copy(text,i,1)="з" then begin delete(text,i,1); insert("z",text,i); end;
   if copy(text,i,1)="и" then begin delete(text,i,1); insert("i",text,i); end;
   if copy(text,i,1)="й" then begin delete(text,i,1); insert("y",text,i); end;
   if copy(text,i,1)="к" then begin delete(text,i,1); insert("k",text,i); end;
   if copy(text,i,1)="л" then begin delete(text,i,1); insert("l",text,i); end;
   if copy(text,i,1)="м" then begin delete(text,i,1); insert("m",text,i); end;
   if copy(text,i,1)="н" then begin delete(text,i,1); insert("n",text,i); end;
   if copy(text,i,1)="о" then begin delete(text,i,1); insert("o",text,i); end;
   if copy(text,i,1)="п" then begin delete(text,i,1); insert("p",text,i); end;
   if copy(text,i,1)="р" then begin delete(text,i,1); insert("r",text,i); end;
   if copy(text,i,1)="с" then begin delete(text,i,1); insert("s",text,i); end;
   if copy(text,i,1)="т" then begin delete(text,i,1); insert("t",text,i); end;
   if copy(text,i,1)="у" then begin delete(text,i,1); insert("u",text,i); end;
   if copy(text,i,1)="ф" then begin delete(text,i,1); insert("f",text,i); end;
   if copy(text,i,1)="х" then begin delete(text,i,1); insert("h",text,i); end;
   if copy(text,i,1)="ц" then begin delete(text,i,1); insert("c",text,i); end;
   if copy(text,i,1)="ч" then begin delete(text,i,1); insert("ch",text,i); end;
   if copy(text,i,1)="ш" then begin delete(text,i,1); insert("sh",text,i); end;
   if copy(text,i,1)="щ" then begin delete(text,i,1); insert("sch",text,i); end;
   if copy(text,i,1)="ъ" then begin delete(text,i,1); insert("""",text,i); end;
   if copy(text,i,1)="ы" then begin delete(text,i,1); insert("yi",text,i); end;
   if copy(text,i,1)="ь" then begin delete(text,i,1); insert(""",text,i); end;
   if copy(text,i,1)="э" then begin delete(text,i,1); insert("ye",text,i); end;
   if copy(text,i,1)="ю" then begin delete(text,i,1); insert("yu",text,i); end;
   if copy(text,i,1)="я" then begin delete(text,i,1); insert("ya",text,i); end;
   if copy(text,i,1)="А" then begin delete(text,i,1); insert("A",text,i); end;
   if copy(text,i,1)="Б" then begin delete(text,i,1); insert("B",text,i); end;
   if copy(text,i,1)="В" then begin delete(text,i,1); insert("V",text,i); end;
   if copy(text,i,1)="Г" then begin delete(text,i,1); insert("G",text,i); end;
   if copy(text,i,1)="Д" then begin delete(text,i,1); insert("D",text,i); end;
   if copy(text,i,1)="Е" then begin delete(text,i,1); insert("E",text,i); end;
   if copy(text,i,1)="Ё" then begin delete(text,i,1); insert("E",text,i); end;
   if copy(text,i,1)="Ж" then begin delete(text,i,1); insert("Zh",text,i); end;
   if copy(text,i,1)="З" then begin delete(text,i,1); insert("Z",text,i); end;
   if copy(text,i,1)="И" then begin delete(text,i,1); insert("I",text,i); end;
   if copy(text,i,1)="Й" then begin delete(text,i,1); insert("Y",text,i); end;
   if copy(text,i,1)="К" then begin delete(text,i,1); insert("K",text,i); end;
   if copy(text,i,1)="Л" then begin delete(text,i,1); insert("L",text,i); end;
   if copy(text,i,1)="М" then begin delete(text,i,1); insert("M",text,i); end;
   if copy(text,i,1)="Н" then begin delete(text,i,1); insert("N",text,i); end;
   if copy(text,i,1)="О" then begin delete(text,i,1); insert("O",text,i); end;
   if copy(text,i,1)="П" then begin delete(text,i,1); insert("P",text,i); end;
   if copy(text,i,1)="Р" then begin delete(text,i,1); insert("R",text,i); end;
   if copy(text,i,1)="С" then begin delete(text,i,1); insert("S",text,i); end;
   if copy(text,i,1)="Т" then begin delete(text,i,1); insert("T",text,i); end;
   if copy(text,i,1)="У" then begin delete(text,i,1); insert("U",text,i); end;
   if copy(text,i,1)="Ф" then begin delete(text,i,1); insert("F",text,i); end;
   if copy(text,i,1)="Х" then begin delete(text,i,1); insert("H",text,i); end;
   if copy(text,i,1)="Ц" then begin delete(text,i,1); insert("C",text,i); end;
   if copy(text,i,1)="Ч" then begin delete(text,i,1); insert("Ch",text,i); end;
   if copy(text,i,1)="Ш" then begin delete(text,i,1); insert("Sh",text,i); end;
   if copy(text,i,1)="Щ" then begin delete(text,i,1); insert("Sch",text,i); end;
   if copy(text,i,1)="Ъ" then begin delete(text,i,1); insert("""",text,i); end;
   if copy(text,i,1)="Ы" then begin delete(text,i,1); insert("Yi",text,i); end;
   if copy(text,i,1)="Ь" then begin delete(text,i,1); insert(""",text,i); end;
   if copy(text,i,1)="Э" then begin delete(text,i,1); insert("Ye",text,i); end;
   if copy(text,i,1)="Ю" then begin delete(text,i,1); insert("Yu",text,i); end;
   if copy(text,i,1)="Я" then begin delete(text,i,1); insert("Ya",text,i); end;
 end;
 result:=Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=TextToTranslit(Memo1.Text);
end;

end.


 
Anatoly Podgoretsky ©   (2005-01-30 21:53) [14]

Однако :-)


 
Saimon   (2005-02-03 01:39) [15]

Спасибоооо!!!!!!!!!!!!!!

Cgfcb,jjjj!!!!!!!!!!!!!!



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.039 c
1-1107722490
SLAK
2005-02-06 23:41
2005.02.20
типы дробных чисел


1-1107517664
Vladimir29
2005-02-04 14:47
2005.02.20
клавиатура


1-1107333376
denis24
2005-02-02 11:36
2005.02.20
изменения размера шрифта при редактировании в stringgtide


1-1107704675
Gear99
2005-02-06 18:44
2005.02.20
Как создать одно всплывающее окно из другого?


14-1106763171
BZsder
2005-01-26 21:12
2005.02.20
Создание окна