Форум: "Начинающим";
Текущий архив: 2014.06.01;
Скачать: [xml.tar.bz2];
ВнизЗамена русских букв на латинские Найти похожие ветки
← →
санек (2013-08-08 14:38) [0]Здравствуйте, Уважаемые мастера программирования!
Помогите решить задачу
Есть Слово на русском языке. Нужно заменить его тем же словом но латинскими буквами. Например "машина" заменить на "mashina".
Все бы хорошо, но вот когда с русском слове встречаются буквы, которые заменяются 2-мя латинскими буквами появляется проблема.
Спасибо
← →
брат Птибурдукова (2013-08-08 14:41) [1]
> появляется проблема
какая?
← →
Вова (2013-08-08 14:49) [2]создаешь таблицу соответствий. Каждому русскому символу пишешь в соответствие набор (или одну) английских и заменяешь по таблице.
← →
санек (2013-08-08 14:55) [3]Я заменяю так
lan:=rus;
if rus[i]="с" then lat[i];="s".
Но если попадается одна из тех букв то мне получается надоif rus[i]="ш" then lat[i]:="sh"
но так ведь нельзя.
и если делатьif rus[i]:="ш" then begin lat[i]:="s"; lat[i+1]:="h"
и тогда меняется длина строки lat
← →
Anatoly Podgoretsky © (2013-08-08 15:07) [4]Да хоть на четыре.
> if rus[i]="ш" then lat[i]:="sh" но так ведь нельзя.
Да так нельзый и она должна изменить или ты считаешь что две буквы занимают ровно столько места, что и одна
← →
санек (2013-08-08 15:43) [5]Все разобрался.
Вот такfor n:=1 to Length(FIO_r) do
begin
if FIO_r[n]="Ш" then
begin
FIO_r[n]:="S";
Insert(" ",FIO_r,n+1);
FIO_r[n+1]:="h";
end;
end;
А вот как быть с регистром букв?
Есть ли для поиска строки в строке без учета регистра?
← →
Вова (2013-08-08 16:54) [6]есть функции приведения строки к одному регистру. Кажется.
← →
Вова (2013-08-08 16:56) [7]http://delphibasics.ru/AnsiUpperCase.php
← →
Вова (2013-08-08 16:58) [8]AnsiCompareText Сравнивает две строки без учета регистра, но с учетом языковых особенностей Windows.
← →
Anatoly Podgoretsky © (2013-08-08 18:40) [9]
> Есть ли для поиска строки в строке без учета регистра?
Так и будешь скрывать СУБД
← →
санек (2013-08-09 10:47) [10]Все Спасибо пацаны. Все разобрался. Через while сделал
← →
Плохиш © (2013-08-09 11:19) [11]Тяпница, можно и подать
const
RusToTranslit: array[$00..$51] of String =
// x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
("", "Jo", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"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", "Shh", "#", "Y", """", "Je", "Ju", "Ja",
"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", "shh", "#", "y", """", "je", "ju", "ja",
"", "jo"
);
function WideCharToChar(const WCh: WideChar): String;
var
wcTmp: Array[0..1] of WideChar;
begin
if (Hi(Integer(WCh)) = $04) and
((Lo(Integer(WCh)) > $00) and (Lo(Integer(WCh)) <= $51)) then
begin
Result := RusToTranslit[Lo(Integer(WCh))];
end
else
begin
wcTmp[0] := WCh;
wcTmp[1] := #0;
Result := WideCharToString(@wcTmp);
end;
end;
function WideStringToTranslit(const WString: WideString): String;
var
lIndex: Integer;
begin
Result := "";
for lIndex := 1 to Length(WString) do
Result := Result + WideCharToChar(WString[lIndex]);
end;
← →
[ВладОшин] © (2013-08-09 12:32) [12]function TfrmForTechSup.TranslitRus2Lat(const Str: string): string;
const
RArrayL = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
RArrayU = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
colChar = 33;
arr: array[1..2, 1..ColChar] of string =
(("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y",
"k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f",
"kh", "ts", "ch", "sh", "shch", """", "y", """", "e", "yu", "ya"),
("A#", "B#", "V#", "G#", "D#", "E#", "YO", "ZH", "Z#", "I#", "Y#",
"K#", "L#", "M#", "N#", "O#", "P#", "R#", "S#", "T#", "U#", "F#",
"KH", "TS", "CH", "SH", "SH", """", "Y#", """", "E#", "YU", "YA"));
var
i: Integer;
LenS: Integer;
p: integer;
d: byte;
begin
result := "";
LenS := length(str);
for i := 1 to lenS do
begin
d := 1;
p := pos(str[i], RArrayL);
if p = 0 then
begin
p := pos(str[i], RArrayU);
d := 2
end;
if p <> 0 then
result := result + arr[d, p]
else
result := result + str[i]; //если не русская буква, то берем исходную
end;
end;
← →
Sha © (2013-08-09 16:06) [13]> [ВладОшин]
разные щ и Щ
← →
[ВладОшин] © (2013-08-09 16:20) [14]
> Sha © (09.08.13 16:06) [13]
так надо было:)
это хлеб черный, (если за белый принять Плохиш © (09.08.13 11:19) [11]
Тяпница, можно и подать)
← →
Inovet © (2013-08-09 17:44) [15]Вот интересный вопрос: как праильно транслитерировать
ШИЛО - ShILO, SHILO
?
А если
ШиЛО, МИЖ, МиЖ?
← →
Плохиш © (2013-08-09 21:23) [16]Вопрос к делфи отношения не имеет.
Руководствоваться необходимо личными предпочтениями ;-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.06.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c