![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция 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 а не ноль