Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизПроблема с транслитерезацией Найти похожие ветки
← →
Delphin (2004-02-09 14:25) [0]Hi ALL! Народ, почему этот код ВООБЩЕ не хочет рабоать? Кто знает где есть ошибка ? Я уже запарился искать эту ошибку...
var
Form3: TForm3;
RA:Array [0..65] of String;
LA:Array [0..65] of String;
Sym:String;
I,N:Integer;
procedure TForm3.FormCreate(Sender: TObject);
begin
RA[0]:="?"; LA[0]:="a";
RA[1]:="?"; LA[1]:="b";
RA[2]:="?"; LA[2]:="v";
RA[3]:="?"; LA[3]:="g";
RA[4]:="?"; LA[4]:="d";
RA[5]:="?"; LA[5]:="je";
RA[6]:="?"; LA[6]:="jo";
RA[7]:="?"; LA[7]:="zh";
RA[8]:="?"; LA[8]:="z";
RA[9]:="?"; LA[9]:="i";
RA[10]:="?"; LA[10]:="j";
RA[11]:="?"; LA[11]:="k";
RA[12]:="?"; LA[12]:="l";
RA[13]:="?"; LA[13]:="m";
RA[14]:="?"; LA[14]:="n";
RA[15]:="?"; LA[15]:="o";
RA[16]:="?"; LA[16]:="p";
RA[17]:="?"; LA[17]:="r";
RA[18]:="?"; LA[18]:="s";
RA[19]:="?"; LA[19]:="t";
RA[20]:="?"; LA[20]:="u";
RA[21]:="?"; LA[21]:="f";
RA[22]:="?"; LA[22]:="h";
RA[23]:="?"; LA[23]:="c";
RA[24]:="?"; LA[24]:="ch";
RA[25]:="?"; LA[25]:="sh";
RA[26]:="?"; LA[26]:="sh";
RA[27]:="?"; LA[27]:="";
RA[28]:="?"; LA[28]:="i";
RA[29]:="?"; LA[29]:="";
RA[30]:="?"; LA[30]:="e";
RA[31]:="?"; LA[31]:="ju";
RA[32]:="?"; LA[32]:="ja";
RA[33]:="?"; LA[33]:="A";
RA[34]:="?"; LA[34]:="B";
RA[35]:="?"; LA[35]:="V";
RA[36]:="?"; LA[36]:="G";
RA[37]:="?"; LA[37]:="D";
RA[38]:="?"; LA[38]:="Je";
RA[39]:="?"; LA[39]:="Jo";
RA[40]:="?"; LA[40]:="Zh";
RA[41]:="?"; LA[41]:="Z";
RA[42]:="?"; LA[42]:="I";
RA[43]:="?"; LA[43]:="J";
RA[44]:="?"; LA[44]:="K";
RA[45]:="?"; LA[45]:="L";
RA[46]:="?"; LA[46]:="M";
RA[47]:="?"; LA[47]:="N";
RA[48]:="?"; LA[48]:="O";
RA[49]:="?"; LA[49]:="P";
RA[50]:="?"; LA[50]:="R";
RA[51]:="?"; LA[51]:="S";
RA[52]:="?"; LA[52]:="T";
RA[53]:="?"; LA[53]:="U";
RA[54]:="?"; LA[54]:="F";
RA[55]:="?"; LA[55]:="H";
RA[56]:="?"; LA[56]:="C";
RA[57]:="?"; LA[57]:="Ch";
RA[58]:="?"; LA[58]:="Sh";
RA[59]:="?"; LA[59]:="Sh";
RA[60]:="?"; LA[60]:="";
RA[61]:="?"; LA[61]:="I";
RA[62]:="?"; LA[62]:="";
RA[63]:="?"; LA[63]:="E";
RA[64]:="?"; LA[64]:="Ju";
RA[65]:="?"; LA[65]:="Ja";
end;
procedure TForm3.TransExecute(Sender: TObject);
begin
For I:=0 To Form1.Memo1.GetTextLen-1 Do Begin
Form1.Memo1.SelLength:=0;
Form1.Memo1.SelLength:=1;
Sym:=Form1.Memo1.SelText;
Sleep(5);
For N:=0 To 65 Do Begin
IF Sym=RA[N] Then Begin Sym:=LA[N];
Memo1.Text:=Memo1.Text+Sym;
End
Else
IF N=65 Then
Memo1.Text:=Memo1.Text+Sym;
End;
End;
end;
← →
Delphin (2004-02-09 14:26) [1]Ой, RA - это массив заполненый русскими буквами, волт только при посте он почему-то заполнился вопролительными знаками
← →
PVOzerski (2004-02-09 14:29) [2]>Form1.Memo1.SelLength:=0;
>Form1.Memo1.SelLength:=1;
>Sym:=Form1.Memo1.SelText;
А это для чего?
← →
AKul (2004-02-09 14:47) [3]
> Delphin © (09.02.04 14:25)
Я думаю из поста PVOzerski © (09.02.04 14:29) [2] Вам стало ясно, что Sym постоянно имеет одно и тоже значение?
Если не стало, то попробуйте заменить выше указанные строки, например, на Sym:=Form1.Memo1.Text[i].
А зачем в приведенном Вами коде Sleep?
← →
Delphin (2004-02-09 14:49) [4]AKul © (09.02.04 14:47) [3]
Ну я торможу первый цикл, для выполнения второго, ок, попробую обойтись без этого
← →
Woodpecker (2004-02-09 14:50) [5]Удалено модератором
← →
AKul (2004-02-09 14:57) [6]
> Delphin © (09.02.04 14:49) [4]
> Ну я торможу первый цикл, для выполнения второго
?????? 8-(
Это каким же образом?????
Это же один поток???????
Это же последовательное выполнение???????
← →
zamkom (2004-02-09 15:01) [7]Ну ты даеш. Надо быть внимательней у тебя ошибка вот здесь:
IF Sym=RA[N] Then Begin Sym:=LA[N];
Вместо этого надо писать:
IF Sym=LA[N] Then Begin Sym:=RA[N];
Ты сравниваеш не то.
← →
zamkom (2004-02-09 15:01) [8]И тормозить поток не надо :)
← →
AKul (2004-02-09 15:08) [9]
> zamkom © (09.02.04 15:01) [7]
Нет, в этой строке у него правильно - он с русского в транслит переводит....
> Delphin © (09.02.04 14:25)
См. [2], [3] на счет Sym.
← →
Delphin (2004-02-09 15:08) [10]zamkom © (09.02.04 15:01) Не, тут всё верно, я с русского перевожу на латиницу
← →
zamkom (2004-02-09 15:14) [11]Ну хорошо тогда попробуй вот так у меня работает без проблем.
begin
For I:=0 To Form1.Memo1.GetTextLen-1
Do Begin
Sym:=Form1.Memo1.Text[i];
For N:=0 To 65 Do Begin
IF Sym=RA[N] Then
Begin
Sym:=LA[N];
End Else
IF N=65 Then
Memo1.Text:=Memo1.Text+Sym;
end;
end;
← →
Delphin (2004-02-09 15:14) [12]For I:=0 To Form1.Memo1.GetTextLen Do Begin
Sym:=Form1.Memo1.Text[i];
For N:=0 To 65 Do Begin
IF Sym=RA[N] Then Begin
Sym:=LA[N];
Memo1.Text:=Memo1.Text+Sym;
End
Else
IF (N=65)And(Form1.Memo1.Text[i]<>Sym) Then
Memo1.Text:=Memo1.Text+Sym; // переводит вроде не плохо, но происходит дублирование
← →
zamkom (2004-02-09 15:16) [13]После Sym:=LA[N];
убери Memo1.Text:=Memo1.Text+Sym;
тогда дублировать не будет.
← →
Delphin (2004-02-09 15:17) [14]Всем спасибо, тепрь всё отлично работает :)
← →
SPIRIT (2004-02-09 15:20) [15]>
> Delphin © (09.02.04 14:25)
> Hi ALL! Народ, почему этот код ВООБЩЕ не хочет рабоать?
> Кто знает где есть ошибка ? Я уже запарился искать эту ошибку...
А компилятор что пишет ?
← →
Яичница (2004-02-09 15:27) [16]ИМХО, вот так будет красивее -) Только - перекодировка для некоторых символов определена не совсем правильно - точно не помню, а искать сейчас некогда.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
LA:array["
← →
Яичница (2004-02-09 15:29) [17]Ну вот.... руссие симводы поехали при вставке.... придется исправить...
var
Form1: TForm1;
const
LA:array["А".."я"] of string =
(
"A","B","V","G","D","E","ZH","Z","I","J","K","L","M",
"N","O","P","R","S","T","U","F","H","TS","CH","SH","SHH","","Y","","E","YU","YA",
"a","b","v","g","d","e","zh","z","i","j","k","l","m",
"n","o","p","r","s","t","u","f","h","ts","ch","sh","shh","","y","","e","yu","ya"
);
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
For i:=1 To Form1.Memo1.GetTextLen do
begin
case Memo1.Text[i] of
"Ё":Memo1.Text :=Memo1.Text+"YE";
"ё":Memo1.Text :=Memo1.Text+"ye";
"А".."я": Memo1.Text :=Memo1.Text+LA[Memo1.Text[i]];
else Memo1.Text :=Memo1.Text+Memo1.Text[i];
end;
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c