Форум: "Начинающим";
Текущий архив: 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 : …
Rus : …
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