Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизФункция перевода строки из русской в английскую и наоборот. Найти похожие ветки
← →
Kostik (2006-01-17 04:27) [0]Существует ли какая нибудь функция для быстрого перевода троки например "qwerty" в "йцукен", и наоборот???
Мне надо чтобы программа умела переводить русский текст в английский и наоборот именно вот таким образом. В хелпах ответа не нашел...
← →
gdaujk © (2006-01-17 08:45) [1]Стандартной функции, насколько я знаю, нет. Ниже приведённая функция делалась очень давно, возможны недочёты...
const
EnCH: string = "`qwertyuiop[]asdfghjkl;zxcvbnm,./~!@#$%^&*()_+|QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?";
RuCH: string = "ёйцукенгшщзхъфывапролджячсмитьбю.Ё!"№;%:?*()_+/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,";
procedure TForm1.Translate(NowLang,FutureLang: string);
var
i, j: word;
Ch: Char;
begin
Memo2.Text := "";
for i := 1 to length(Memo1.Text) do
begin
Ch := chr(0);
for j := 1 to Length(NowLang) do
if NowLang[j] = Memo1.Text[i]
then
begin
Ch := FutureLang[j];
Break;
end;
if Memo1.Text[i] = chr(39) then Ch := "э";
if Memo1.Text[i] = "э" then Ch := Chr(39);
if Ch = Chr(0)
then Ch := Memo1.Text[i];
Memo2.Text := Memo2.Text + Ch;
end;
end;
← →
gdaujk © (2006-01-17 08:47) [2]Использовать
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Translate(RuCH,EnCh);
end;
PS: функцию точно надо переделать...
← →
Ega23 © (2006-01-17 09:37) [3]
> gdaujk © (17.01.06 08:45) [1]
"я" и "Я" не учтены
← →
msguns © (2006-01-17 09:53) [4]>gdaujk © (17.01.06 08:45) [1]
О, боже ! А нельзя ли все эту дребедень выполнить одним оператором в цикле ?
← →
Kostik (2006-01-17 09:57) [5]>gdaujk
Большое спасибо!!!
А то я тут написал функцию.. Она очень топорная, поскольку я еще мало Делфи занимаюсь...
Вот, потештесь.. )
Function Translete(l:bool; c:char):char;
begin
if l = true then
begin
if c = char("Q") then c:= char("Й");
if c = char("W") then c:= char("Ц");
if c = char("E") then c:= char("У");
if c = char("R") then c:= char("К");
if c = char("T") then c:= char("Е");
if c = char("Y") then c:= char("Н");
if c = char("U") then c:= char("Г");
if c = char("I") then c:= char("Ш");
if c = char("P") then c:= char("З");
if c = char("{") then c:= char("Х");
if c = char("S") then c:= char("Ы");
if c = char("D") then c:= char("В");
if c = char("F") then c:= char("А");
if c = char("G") then c:= char("П");
if c = char("H") then c:= char("Р");
if c = char("J") then c:= char("О");
if c = char("K") then c:= char("Л");
if c = char("L") then c:= char("Д");
if c = char("Z") then c:= char("Я");
if c = char("X") then c:= char("Ч");
if c = char("C") then c:= char("С");
if c = char("V") then c:= char("М");
if c = char("B") then c:= char("И");
if c = char("N") then c:= char("Т");
if c = char("M") then c:= char("Ь");
if c = char("<") then c:= char("Б");
if c = char(">") then c:= char("Ю");
if c = char(":") then c:= char("Ж");
if c = char(""") then c:= char("Э");
if c = char("q") then c:= char("й");
if c = char("w") then c:= char("ц");
if c = char("e") then c:= char("у");
if c = char("r") then c:= char("к");
if c = char("t") then c:= char("е");
if c = char("y") then c:= char("н");
if c = char("u") then c:= char("г");
if c = char("i") then c:= char("ш");
if c = char("o") then c:= char("щ");
if c = char("p") then c:= char("з");
if c = char("[") then c:= char("х");
if c = char("]") then c:= char("ъ");
if c = char("}") then c:= char("Ъ");
if c = char("a") then c:= char("ф");
if c = char("s") then c:= char("ы");
if c = char("d") then c:= char("в");
if c = char("f") then c:= char("а");
if c = char("g") then c:= char("п");
if c = char("h") then c:= char("р");
if c = char("j") then c:= char("о");
if c = char("k") then c:= char("л");
if c = char("l") then c:= char("д");
if c = char("z") then c:= char("я");
if c = char("x") then c:= char("ч");
if c = char("c") then c:= char("с");
if c = char("v") then c:= char("м");
if c = char("b") then c:= char("и");
if c = char("n") then c:= char("т");
if c = char("m") then c:= char("ь");
if c = char(",") then c:= char("б");
if c = char(".") then c:= char("ю");
if c = char(";") then c:= char("ж");
if c = char("""") then c:= char("э");
if c = char("/") then c:= char(".");
if c = char("?") then c:= char(",");
end;
if l = false then
begin
if c = char("Й") then c:= char("Q");
if c = char("Ц") then c:= char("W");
if c = char("У") then c:= char("E");
if c = char("К") then c:= char("R");
if c = char("Е") then c:= char("T");
if c = char("Н") then c:= char("Y");
if c = char("Г") then c:= char("U");
if c = char("Ш") then c:= char("I");
if c = char("Щ") then c:= char("O");
if c = char("З") then c:= char("P");
if c = char("Х") then c:= char("{");
if c = char("Ъ") then c:= char("}");
if c = char("Ф") then c:= char("A");
if c = char("Ы") then c:= char("S");
if c = char("В") then c:= char("D");
if c = char("А") then c:= char("F");
if c = char("П") then c:= char("G");
if c = char("Р") then c:= char("H");
if c = char("О") then c:= char("J");
if c = char("Л") then c:= char("K");
if c = char("Д") then c:= char("L");
if c = char("Я") then c:= char("Z");
if c = char("Ч") then c:= char("X");
if c = char("С") then c:= char("C");
if c = char("М") then c:= char("V");
if c = char("И") then c:= char("B");
if c = char("Т") then c:= char("N");
if c = char("Ь") then c:= char("M");
if c = char("Б") then c:= char("<");
if c = char("Ю") then c:= char(">");
if c = char("Ж") then c:= char(":");
if c = char("Э") then c:= char(""");
if c = char("й") then c:= char("q");
if c = char("ц") then c:= char("w");
if c = char("у") then c:= char("e");
if c = char("к") then c:= char("r");
if c = char("е") then c:= char("t");
if c = char("н") then c:= char("y");
if c = char("г") then c:= char("u");
if c = char("ш") then c:= char("i");
if c = char("щ") then c:= char("o");
if c = char("з") then c:= char("p");
if c = char("х") then c:= char("[");
if c = char("ъ") then c:= char("]");
if c = char("ф") then c:= char("a");
if c = char("ы") then c:= char("s");
if c = char("в") then c:= char("d");
if c = char("а") then c:= char("f");
if c = char("п") then c:= char("g");
if c = char("р") then c:= char("h");
if c = char("о") then c:= char("j");
if c = char("л") then c:= char("k");
if c = char("д") then c:= char("l");
if c = char("я") then c:= char("z");
if c = char("ч") then c:= char("x");
if c = char("с") then c:= char("c");
if c = char("м") then c:= char("v");
if c = char("и") then c:= char("b");
if c = char("т") then c:= char("n");
if c = char("ь") then c:= char("m");
if c = char("б") then c:= char(",");
if c = char("ю") then c:= char(".");
if c = char("ж") then c:= char(";");
if c = char("э") then c:= char("""");
if c = char(".") then c:= char("/");
if c = char(",") then c:= char("?");
end;
result := c;
end;
← →
Johnmen © (2006-01-17 09:59) [6]Напомнило знаменитую IncDay :)))))))))))0
← →
Kostik (2006-01-17 09:59) [7]с английского на русский
procedure TForm1.Button3Click(Sender: TObject);
var
i, u : integer;
s,t : String;
c : char;
begin
for i := 0 to RichEdit1.Lines.Count-1 do
begin
s := RichEdit1.Lines.Strings[i];
t := "";
if length(s)>0 then
for u := 0 to length(s) do
begin
c := s[u];
c := Translete(true, c);
s[u] := c;
end;
RichEdit1.Lines.Strings[i] := s;
end;
end;
с русского на английской
procedure TForm1.Button4Click(Sender: TObject);
var
i, u : integer;
s,t : String;
c : char;
begin
for i := 0 to RichEdit1.Lines.Count-1 do
begin
s := RichEdit1.Lines.Strings[i];
t := "";
if length(s)>0 then
for u := 0 to length(s) do
begin
c := s[u];
c := Translete(false, c);
s[u] := c;
end;
RichEdit1.Lines.Strings[i] := s;
end;
end;
Спасибо вам большое, помогли!!
← →
Kostik (2006-01-17 10:10) [8]Только... почему то моя функция работает быстрее гораздо... :-[
← →
_RusLAN © (2006-01-17 10:19) [9]Kostik (17.01.06 10:10) [8]
Только... почему то моя функция работает быстрее гораздо... :-[
Используй Case должно еще быстрее ;)
← →
Kostik (2006-01-17 11:46) [10]Вроде сделал...
Вроде и работает быстро...
*Большое СПАСИБО gdaujk за идею... *
Inglish >> Russian
var
i, u, k: word;
C: Char;
s : String;
begin
RichEdit2.Lines.BeginUpdate;
s := "";
for i := 0 to RichEdit2.Lines.Count-1 do
begin
k := 0;
s := RichEdit2.Lines.Strings[i];
for u := 1 to Length(s) do
if pos(char(s[u]), EnCH)<>0 then
begin
k := pos(char(s[u]), EnCH);
C := RuCH[k];
s[u] := c;
end;
RichEdit2.Lines.Strings[i] := s;
end;
RichEdit2.Lines.EndUpdate;
end;
Russian >> Inglish
var
i, u, k: word;
C: Char;
s : String;
begin
s := "";
for i := 0 to RichEdit2.Lines.Count-1 do
begin
k := 0;
s := RichEdit2.Lines.Strings[i];
for u := 1 to Length(s) do
if pos(char(s[u]), RuCH)<>0 then
begin
k := pos(char(s[u]), RuCH);
C := EnCH[k];
s[u] := c;
end;
RichEdit2.Lines.Strings[i] := s;
end;
end;
>_RusLAN
А через Case я что то не очень понял как сделать то...
Большое спасибо ВСЕМ кто откликнулся! Удачи ВАМ ВСЕМ :)
← →
Johnmen © (2006-01-17 11:54) [11]Вообще-то, всё это делается, мягко говоря, несколько не так....:)
← →
Kostik (2006-01-17 11:56) [12]>Johnmen
а как?
← →
Anatoly Podgoretsky © (2006-01-17 12:02) [13]Kostik (17.01.06 10:10) [8]
Вообще то ты себе льстишь
← →
Anatoly Podgoretsky © (2006-01-17 12:05) [14]Kostik (17.01.06 11:56) [12]
С помощью таблицы подстановки и даже функция не нужноfor I := 1 to Length(I) do S[I] := CvtTable[S[I]];
Быстрее этого нельзя.
← →
Johnmen © (2006-01-17 12:08) [15]1. Заводится таблица перекодировки. 256 элементов. На каждом месте X в ней указан код символа, в который преобразуется код X.
2. Пробегаем по байтам исходной строки и делаем замену. s[i]:=TBL[x].
Всё...
И не надо никаких pos, if и пр.
← →
Игорь Шевченко © (2006-01-17 12:51) [16]Johnmen © (17.01.06 12:08) [15]
> Заводится таблица перекодировки. 256 элементов
Особенно значимыми являются первые 32 символа :)
← →
Johnmen © (2006-01-17 12:56) [17]>Игорь Шевченко © (17.01.06 12:51) [16]
Это чтоб не думать, что там в строке попадётся...:))
← →
gdaujk © (2006-01-17 12:57) [18]>Johnmen © (17.01.06 11:54) [11]
Я и не настаиваю, что это оптимальный вариант. Говорю же, писал давным давно...
← →
Kostik (2006-01-17 13:11) [19]>Anatoly Podgoretsky
>for I := 1 to Length(I) do S[I] := CvtTable[S[I]];
>Быстрее этого нельзя.
Что то я не понял как это использовать....
иCvtTable
вообще даже в хелпе найти не могу...
← →
ANB © (2006-01-17 14:02) [20]
> и CvtTable вообще даже в хелпе найти не могу...
CvtTable придется самому нарисовать. Это таблица перекодировки - обычный массив.
← →
evvcom © (2006-01-17 15:42) [21]
> CvtTable вообще даже в хелпе найти не могу
Anatoly Podgoretsky © (17.01.06 12:05) [14] и Johnmen © (17.01.06 12:08) [15] говорят об одном и том же. Слей это воедино и поймешь откуда эта CvtTable.
← →
Змей © (2006-01-19 01:04) [22]Извините у меня вот не richedit а edit.text
как на ней вот это прокатывать? for i := 0 to RichEdit2.Lines.Count-1 do
:(
← →
edit.text (2006-01-19 03:00) [23]Вот так:
procedure TForm1.Button3Click(Sender: TObject);
var
i, u, k: word;
C: Char;
s : String;
begin
s := "";
k := 0;
s := Edit1.Text;
for u := 1 to Length(s) do
if pos(char(s[u]), EnCH)<>0 then
begin
k := pos(char(s[u]), EnCH);
C := RuCH[k];
s[u] := c;
end;
Edit1.Text := s;
end;
← →
Змей © (2006-01-19 03:44) [24]thank
← →
Fay © (2006-01-19 05:01) [25]2 Kostik (17.01.06 9:57) [5]
1) Из кода следует, чтоc
иl
модет принимать несколько значений одновременно. Это странно.
2) Есть по два результата для одинаковых аргументов (например i = True, c = ";"). Это тоже очень странно.
Учитесь думать головой.
← →
AbrosimovA (2006-01-19 13:29) [26]
const Translit: array[1..33] of string = ("a","b","v","g","d","e","yo",
"zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f",
"x","c","ch","sh","sh`","`","y","""","e`","yu","ya");
Cyrillic: array[1..33] of string = ("а","б","в","г","д","е","ё",
"ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф",
"х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
procedure TForm1.mnTransClick(Sender: TObject);
var k: cardinal;
begin
for k:=1 to 33 do
begin
RichEdt.Lines.Text:=StringReplace(RichEdt.Lines.Text,Cyrillic[k],Translit[k],[rfReplaceAll]);
RichEdt.Lines.Text:=StringReplace(RichEdt.Lines.Text,AnsiUpperCase(Cyrillic[k]),
UpperCase(Translit[k]),[rfReplaceAll]);
end
end;
← →
Kostik (2006-01-19 13:39) [27]>Fay
>1) Из кода следует, что c и l модет принимать несколько значений одновременно. Это странно.
>2) Есть по два результата для одинаковых аргументов (например i = True, c = ";"). Это тоже очень странно.
>Учитесь думать головой.
Поясните пожалуйста, а то я не понял что то... Просто я не так давно занимаюсь делфи...
А головой то я думаю) Не думал бы - не написал бы САМ ничего.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.016 c