Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

Что-то вроде транслитератора.   Найти похожие ветки 

 
Gauss ©   (2008-02-22 15:11) [0]

Всем прива! Значит у меня возникла такая проблема:

Имеется форма, а на ней Memo1,Memo2, and Button1. Мне нужно, чтобы после прогона я записывал текст в Memo1 (записывал текс на азербайджанском языке, под юникод, как обычно) нажимал на кнопку и в Memo2 тот же текст отображался русскими буквами СООТВЕТСТВЕННО. Т.е. имелось соответствие между буквами руссокого алфавита и азерб-ми. Если вас затрудняют азерб-ие буквы, то преставьте на их месте что то другое, какие то символы например.
А именно код у меня вышел приблизительно такой
var
 Form1: TForm1;
  Const
    Az: array [0..3] of Char = (#252,#101,#105,#63); {Аскии Коды для азербайд-их букв, данные приведенные тут просто примеры}
    Rus: array [0..5] of Char = ("й","ц","у","н","р","ж"); {русские буквы соответствующие выше описанным буквам}
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    s: String;
    i: Integer;
begin
   s := Memo1.Text;
 for i := 1 to Length (s) do
    if ord(s[i]) = ord(Az[i]) then
       begin
          s[i] := Rus[i];
       end;
 Memo2.Text := S;
end;

end.

Токо я знаю что я неправильно код написал, поэтому прошу помощи, как мне сделать так, чтобы появилось мне нужное соответсвие между этими символами и русскими буквами ???
Помогите пож-та)


 
Сергей М. ©   (2008-02-22 15:15) [1]


> текст в Memo1.. под юникод


С каких пор TMemo умеет работать с Юникодом ?


 
Johnmen ©   (2008-02-22 15:16) [2]

Ему про Юникод ещё рано...


 
Gauss ©   (2008-02-22 15:19) [3]

я тнт - компонентами пользуюсь! Юникод не проблема)


 
engine ©   (2008-02-22 15:22) [4]

Во-первых, почему азерб. букв три, а русских пять?
Во-вторых, делать надо приблизительно так:
function Transliterate(Source : String) : String;
const
Az : &#133
Rus : &#133
var i : Integer;
begin
Result := Source;
for i := 0 to high(Az) do
  Result := StringReplace(Result, Az[i], Rus[i], [rfReplaceAll])
end;


 
Сергей М. ©   (2008-02-22 15:22) [5]


> я тнт - компонентами пользуюсь


Ну тады ой)


> Токо я знаю что я неправильно код написал


Откуда знаешь ? Это божье откровение ? Или факты имеются ?)


 
Gauss ©   (2008-02-22 15:24) [6]

факты имеются, результат не получается))


 
Сергей М. ©   (2008-02-22 15:27) [7]


> факты имеются


Так излагай !

Или сие есть тайна государственного значения ?)


 
Gauss ©   (2008-02-22 15:27) [8]


> for i := 0 to high(Az) do

а  high(Az)  -- что показывает?


 
Сергей М. ©   (2008-02-22 15:30) [9]

Судя по коду - тройку обязан.

А что, у тебя другая цифирь видна ?)


 
Gauss ©   (2008-02-22 15:33) [10]


> Так излагай !Или сие есть тайна государственного значения
> ?)


Что излагать? код мой неверный, мне нужно исправить, голова моя не варит до правильного кода, вот и обращаюсь к вам)


 
Gauss ©   (2008-02-22 15:36) [11]


> А что, у тебя другая цифирь видна ?)

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


 
Amoeba ©   (2008-02-22 15:37) [12]

Автору:
При транслитерации всегда одной букве азербайджанской латиницы соответствует одна буква  кириллицы, или может быть сочетание букв?
А почему массивы в приведенном коде разного размера? Может как раз поэтому?


 
Сергей М. ©   (2008-02-22 16:15) [13]


> код мой неверный


КТО тебе это сказал ?)


 
TMemo   (2008-02-22 19:33) [14]

Массив начинается с нуля:


Az: array [0..3] of Char = (#252,#101,#105,#63); {Аскии Коды для азербайд-их букв, данные приведенные тут просто примеры}
   Rus: array [0..5] of Char = ("й","ц","у","н","р","ж");


А индекс s[i] с единицы:

if ord(s[i]) = ord(Az[i])


Значит следует изменить индексы массивов:
Az: array [1..4] of Char
Rus: array [1..6] of Char


 
Gauss ©   (2008-02-22 23:10) [15]

Ок, попробую исправить эти значения. Посморим, если что я тут напишу)))


 
gauss ©   (2008-02-23 21:59) [16]

Общий код мой привожу внизу, а то задают вопросы почему не сходится кол-во элементов в массивах, а я устаю отвечать что это я для пробы написал. А теперь общий код, вот

unit MainUnit;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TTntMemo;
   Memo2: TTntMemo;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }

 public
   { Public declarations }
 end;

var
 Form1: TForm1;

Const
 Az: array [1..33] of Char = (#113,#252,#101,#114,#116,#121,#117,#105,#111,#112,#246,#103,#97,#115,#100,#102, #103,#104,#106,#107,#108,#105,#63,#122,#120,#99,#118,#98,#110,#109,#231,#186,#46 );
Rus: array [1..33] of Char = ("й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф","ы","в","а","п","р","о","л" ,"д","ж","э","я","ч","с","м","и","т","ь","б","ю",".");

 implementation
 
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   s: String;
   i: Integer;
begin
  s := Memo1.Text;
for i := 1 to Length (s) do
   if ord(s[i]) = ord(Az[i]) then
      begin
         s[i] := Rus[i];
      end;
Memo2.Text := S;
end;

end.



Но, результат всё же не хороший получается, и я не могу понять в чем проблема. То ли в Аскии кодах, то ли в самой сапостановке.Проблема в том что, результат у меня наполавину русскими наполавину англ-ми буквами дает. (?)


 
TMemo   (2008-02-23 23:02) [17]

Если заполнить Memo1 вот так:

procedure TForm1.FormCreate(Sender: TObject);
var i:word;      s:string;
begin
s:="";
for i:=1 to 33 do s:=s+Az[i];

Memo1.Text:=s;

end;

qьertyuiopцgasdfghjkli?zxcvbnmзє.

То вот результат:

йцукенгшщзхъфывапролджэячсмитьбю.

Memo1 и Memo2 обычные, не юникодовские.


 
korneley ©   (2008-02-24 08:20) [18]

Я вот этого не понял:
for i := 1 to Length (s) do
  if ord(s[i]) = ord(Az[i]) then
     begin
        s[i] := Rus[i];
     end;

переменную цикла движем по исходной строке и ей же индексируем массив подстановки? Т.е первая буква азербайджанского может быть только на первом месте в транслитерируемой строке? Или транслитерируется алфавит?


 
korneley ©   (2008-02-24 08:27) [19]

Ну и для юникода, как минимум для исходной строки, одинокого char в Az, маловато будет.


 
Gauss ©   (2008-02-24 22:54) [20]


> Ну и для юникода, как минимум для исходной строки, одинокого
> char в Az, маловато будет.


Ясно, а что еще нужно для этого?


 
Gauss ©   (2008-02-25 12:20) [21]

Помогите ребята, в проге такая вещь мне просто нужна,
korneley  ты прав, я тоже там сомневаюсь, только незнаю как исправить :(


> Я вот этого не понял:for i := 1 to Length (s) do   if ord(s[i])
> = ord(Az[i]) then      begin         s[i] := Rus[i];    
>  end;переменную цикла движем по исходной строке и ей же
> индексируем массив подстановки? Т.е первая буква азербайджанского
> может быть только на первом месте в транслитерируемой строке?
>  Или транслитерируется алфавит?



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

Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.006 c
3-1193751735
thely
2007-10-30 16:42
2008.03.23
Изменение БД?


3-1193746119
Dust
2007-10-30 15:08
2008.03.23
TADOQuery неопознанная ошибка


2-1204052315
Эрни
2008-02-26 21:58
2008.03.23
Как найти набор последовательных символов в файле


15-1202627171
Kostafey
2008-02-10 10:06
2008.03.23
С днем рождения ! 10 февраля


2-1203688480
Igor23
2008-02-22 16:54
2008.03.23
Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский