Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];

Вниз

Братцы, помогите дописать ф-ю перевода рус.б. в транслитерацию,   Найти похожие ветки 

 
Yuraz   (2002-06-01 16:57) [0]

всё готово, кроме отфильтровывания любых не буквенных символов. Т.е. буквы меняются нормально, а вот при встече с запятой, точкой и т.д. т.п. нужно что бы этот самый (отличный от буквы) символ менялся на "_" (нижнюю черту).

function RusToEng(s1: string): string;
const
eng: Array[1..60] of String =
("_","a", "b", "v", "g", "d", "e", "e", "g", "z", "i", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "sh", "", "i", "", "e", "u", "ia", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
rus: Array[1..60] of String =
(" ","а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ь", "ы", "ъ", "э", "ю", "я", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
var
i, j, ind, k: integer;
scratch: string;

begin
s1:=AnsiLowerCase(s1);
scratch := "";
i := length(s1);

if i > 0 then

for j := 1 to i do

begin
// находим индекс буквы
ind := 0;
for k := 1 to 60 do
if s1[j] = rus[k] then
begin
ind := k;
break;
end; // if
scratch := scratch + eng[ind];
end; // for
Result := scratch;
end;


 
Magic   (2002-06-01 17:05) [1]

Самое простое - использовать принцип конечного аппарата. Если ты о нем знаеш. Т.к. тебе нужно сделать простой лексический анализатор.


 
Yuraz   (2002-06-01 17:16) [2]

Я не могу разобраться как написать проверку, то что нет этой буквы в списке. И куда вставить. Понимаю, что это как то коротко и красиво получается, но дойти сам не могу.


 
VID   (2002-06-01 17:33) [3]

to SubjAutor: не понятно, какго фига в массиве русских букв, у тебя находятся латинские ... ладно фиг с ними.

function CharFilter(InString:String):String;
Const symb = ",.;:!@#$%^&*()+-=/]}[{`~\|<>"+#39;
var I:Integer;
begin
Result := InString;
IF Length(InString)=0 then Exit;
FOR I:=1 to length(InString) do
IF Pos(InString[I], symb)>0 then Result[i]:="_";
end;

Всё. Просто и наглядно.


 
-=Sergeante=-   (2002-06-01 18:22) [4]

Procedure TForm1.TranslitRus2Eng;
const
colChar=32;
arr:array[1..2,1..ColChar] of string=
(("А","Б","В","Г","Д","Е","Ё","Ж" ,"З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х", "Ц", "Ч", "Ш", "Щ", "Ь", "Ы",{"Ъ",}"Э","Ю", "Я"),
("A","B","V","G","D","E","E","ZH","Z","I","Y","K","L","M","N","O","P","R","S","T","U","F","KH","TS","CH","SH","SHCH","""","Y", "E","YU","YA"));
var s:String;
i,j,k,c:Integer;
LenS:Integer;
Finded:Boolean;
begin
mTo.lines.Clear;
s:="";
c:=mFrom.lines.count-1;
for k:=0 to c do
begin
LenS:=length(mFrom.lines[k]);
s:="";
for i:=1 to lenS do
begin
for j:=1 to colchar do
if (mFrom.lines[k][i]=arr[1,j]) then
begin
s:=s+arr[2,j];
finded:=True;
break
end else if (mFrom.lines[k][i]=AnsiLowerCase(arr[1,j])) then
begin
s:=s+AnsiLowerCase(arr[2,j]);
finded:=True;
break
end else finded:=False;
if not finded then s:=s+mFrom.lines[k][i];
end;//for
mTo.lines.add(s);
end;//for k
end;


Поставить условие на знак препинания, думаю, тут не составит труда. Все рус. буквы транслитеруются по стандарту.


 
Magic   (2002-06-01 19:37) [5]

Еще один способ:

const
BedSimbols: set of = [<все не нужные тебе символы>];

а потом проверяй
var
Ch: char;
...
if Ch in BedSimbols then ...;

вот и вся проверка.



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

Форум: "Основная";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
1-40005
BaDeVlad
2002-06-03 15:30
2002.06.13
Проблемы с RxRichEdit.SelText


1-40028
Alex_KR
2002-06-01 10:44
2002.06.13
Windows XP


1-40000
koks
2002-05-31 10:07
2002.06.13
Номер недели!


14-40155
IronHawk
2002-05-07 15:29
2002.06.13
Литература великая сила!


14-40147
ZimZum
2002-05-07 22:41
2002.06.13
Браузер в Дельфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский