Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
ВнизФункция 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c