Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция Translite


Danco ©   (2009-12-10 10:25:00) 

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

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;


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


brother   (2009-12-10 13:02:00) [1]

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


Anatoly Podgoretsky   (2009-12-10 12:07:00) [2]

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

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


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

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

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


sniknik   (2009-12-10 10:53:00) [4]

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

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;


Danco   (2009-12-10 10:46:00) [5]


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

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


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

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

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


Danco   (2009-12-10 10:43:00) [7]


> brother

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


RWolf   (2009-12-10 10:43:00) [8]

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:00) [9]


> clickmaker

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


Danco   (2009-12-10 10:42:00) [10]


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

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

NewString:=NewString+a[Simvol];

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

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


clickmaker   (2009-12-10 10:42:00) [11]

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


brother   (2009-12-10 10:40:00) [12]

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:00) [13]

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо