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

Вниз

Функция Translite   Найти похожие ветки 

 
Danco ©   (2009-12-10 10:25) [0]

Хочу написать функцию, что бы строку переводила в транслит

function Translite(S: String):String;
var
a : array ["а".."я"] of String;
i : Integer;
Simvol,NewString:String;
begin
a["п"]:="p";
a["р"]:="r";
a["и"]:="i";
a["в"]:="v";
a["е"]:="e";
a["т"]:="t";
for i := 0 to Length(s) do
begin
 Simvol:=Copy(s,i,1);
 NewString:=NewString+a[Simvol];
end;
Result:=NewString;
end;


Что то тут не так, кто-нибудь может помочь?


 
Медвежонок Пятачок ©   (2009-12-10 10:36) [1]

первый сивмол строки находится в позиции 1 а не ноль


 
brother ©   (2009-12-10 10:40) [2]

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


 
brother ©   (2009-12-10 10:40) [3]

взято отсюда:
http://www.delphicoder.ru/sources.html


 
Danco ©   (2009-12-10 10:42) [4]


> Медвежонок Пятачок

Нет, в другом ошибка

NewString:=NewString+a[Simvol];

В данной строке, а точнее в a[Simvol] , т.к. тип переменной Simvol должен быть AnsiChar, но если поменять ее тип, то ошибка возникнет в строке Simvol:=Copy(s,i,1); , и т.д.

Кто знает как String перевести в AnsiChar или наоборот?
Или есть у кого другие идеи?


 
clickmaker ©   (2009-12-10 10:42) [5]

а не проще ли массивчик взять?


 
Danco ©   (2009-12-10 10:43) [6]


> brother

Спасибо большое!!!


 
RWolf ©   (2009-12-10 10:43) [7]

function Translit(const rus:string):string;
const r2l: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","C","CH","SH","SCH","""","Y","""","E","YU","YA");
var i:Integer;c,u:Char;r:string;
begin
 Result:="";
 for i:=1 to Length(rus) do begin
   c:=rus[i];
   u:=AnsiUpperCase(rus[i])[1];
   if (u>=" ")and(u<=#127)then r:=c
   else if (u>="А")and(u<="Я")then r:=r2l[u]
   else if u="Ё" then r:="YO"
   else r:=".";
   if c<>u then r:=AnsiLowerCase(r);
   Result:=Result+r;
 end;
end;


 
Danco ©   (2009-12-10 10:43) [8]


> clickmaker

Каким методом?


 
Медвежонок Пятачок ©   (2009-12-10 10:44) [9]

Нет, в другом ошибка

Ошибка в самом цикле.
Он у тебя начинается с нуля и длина его болльше чем длина строки на единицу.


 
Danco ©   (2009-12-10 10:46) [10]


> Ошибка в самом цикле.Он у тебя начинается с нуля и длина
> его болльше чем длина строки на единицу.

Хорошо, и там ошибка, весь в них зарос )))


 
sniknik ©   (2009-12-10 10:53) [11]

> Что то тут не так
сама идея... транслит нужно вытравливать из употребления, а не потакать ему, пользоваться нужно нормальным языком.

procedure TForm1.Button1Click(Sender: TObject);

function Translite(const st: string): string;
const
 a: array ["а".."я"] of string = (
   "0","1","в","3","4","Е","6","7","Ю","9",
   "к","Л","2","3","о","п","р","7","т","У",
   "0","1","2","3","4","5","6","7","8","9",
   "0","1"
 );
var
 i: integer;
begin
 for i:= 1 to Length(st) do
   if st[i] in ["а".."я"]
     then result:= result + a[st[i]]
     else result:= result + st[i];
end;

begin
 ShowMessage(Translite("привет Волку!!!"));
end;


 
Anatoly Podgoretsky ©   (2009-12-10 12:06) [12]

> Danco  (10.12.2009 10:42:04)  [4]

String перевести в AnsiChar перевести нельзя, наоборот можно и это просто S := Ch


 
Anatoly Podgoretsky ©   (2009-12-10 12:07) [13]

> sniknik  (10.12.2009 10:53:11)  [11]

Ты что транслит это круто!!!


 
brother ©   (2009-12-10 13:02) [14]

ага? а мужики то не знают О_о



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

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

Наверх




Память: 0.51 MB
Время: 0.01 c
15-1259705429
Германн
2009-12-02 01:10
2010.02.07
Или у меня глюки, или что-то изменилось.


2-1260715780
Axtazi
2009-12-13 17:49
2010.02.07
Помогите решить вот такую задачу...


15-1259840977
Insor
2009-12-03 14:49
2010.02.07
Чем составлен данный дамп БД?


15-1259842551
Kaban
2009-12-03 15:15
2010.02.07
форма ГТД


15-1259644584
d@nger
2009-12-01 08:16
2010.02.07
проблема с UserGate и сервером