Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1375876588
listvenniza
2013-08-07 15:56
2014.06.01
md5


15-1384410584
[ВладОшин]
2013-11-14 10:29
2014.06.01
Инди, дисконнект вызывает AV


3-1298717850
ddd329
2011-02-26 13:57
2014.06.01
Вложенные таблицы


15-1385099301
MonoLife
2013-11-22 09:48
2014.06.01
TDBLookupComboBox в wine.


1-1325094968
Deltas
2011-12-28 21:56
2014.06.01
Отрисовка TImage поверх элементов управления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский