Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AnsiReplaceText [D7, XP]


Генрих ©   (2007-01-16 12:21:00) 

Привет ! Помогите с задачей.
В общем объяснить грамотно затрудняюсь, попытаюсь объяснить примером.

var
   SL:TStringList;
Begin

 SL:= TStringList.Create;
 Sl.Add(trim(Memo1.Text));

 SL.Text:= (AnsiReplaceText(SL.Text,'П','P'));
 
 Memo2.Text:= Sl.Text;

Как вы и заметили я заменил в тексте memo1 все русские П на латинские P и поместил текст в memo2.

Теперь пытаюсь заменить таким же методом русскую "Ъ" на   '   - то есть кавычку. Как это    реализовать ?

Т.е

SL.Text:= (AnsiReplaceText(SL.Text,'Ъ',  '   ?     '));


PZ   (2007-01-16 14:07:00) [1]

Я когда-то экспериментировал, может польза какая будет:


unit TransLitUn;
{
  Izone\izone456\index.htm                        14.08.2004 13:05:59 PZ

}
interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls;

type
 TTransLitFrm = class(TForm)
   Rich1: TRichEdit;
   Rich2: TRichEdit;
   RusLatBut: TButton;
   LatRusBut: TButton;
   procedure RusLatButClick(Sender: TObject);
//    procedure LatRusButClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 TransLitFrm: TTransLitFrm;

implementation

{$R *.dfm}

Const
 LenAlfa =71;               // Длина алфавита

 Rus : Array[1..LenAlfa] of Char =
 (
'ж','Ж',  'ё','Ю', 'Ю', 'ю', 'ю', 'ш', 'э', 'я', 'я', 'Ш', 'Ч', 'ч', 'Ё',  'Я', 'Я', 'Э',  {} 'щ','Щ','й','Й',
'и','ь','ц','у','к','е','н','г','з','х','ъ','ф','ы','в','а','п','р','о', 'л','д','с','м','т','б',
'Й','Ь','Ц','У','К','Е','Н','Г','З','Х','Ъ','Ф','Ы','В','А','П','Р','О','Л','Д', 'С','М','И','Т','Б'
 );

 Lat : Array[1..LenAlfa] of String =
 (
'zh','Zh','yo','Yu','Ju','ju','yu','sh','yе','jа','yа','Sh','Ch','ch','Yo','Ya', 'Ja','Ye', {} 'sh','Sh','i','I',
'i','',   'c','u','k','e','n','g','z','h','','f','y','v','a','p','r','o','l','d','s','m',' t','b',
'I', '','C','U','K','E','N','G','Z','H', '','F','Y','V','A','P','R','O','L','D','S','M','I','T','B'
 );

 TestRus =
'Проверка программы преобразования русских букв в TransLit, чтобы можно было пощупать её';

 TestLat =
'Proverka programmy preobrazovanijа russkih bukv v TransLit, chtoby mozhno bylo poshupat eyo';

function RusLat(R : Char): String;
Var
 I, Index : Byte;
begin
 Index := 0;
 For I := 1 to LenAlfa do
   If R = Rus[I] then begin Index := I; Break end;
 If Index = 0 then Result := R else Result := Lat[Index];
end;

function LatRus(L : String): String;
Var
 I, Index : Byte;
begin
 Index := 0;
 For I := 1 to LenAlfa do
   If L = Lat[I] then begin Index := I; Break end;
 If Index = 0 then Result := L else Result := Rus[Index];
end;

procedure TTransLitFrm.RusLatButClick(Sender: TObject);
Var
 I, J : Integer;
 C : Char;
 S, S0 : String;
begin
 Rich2.Clear;
 Rich1.Clear;
 Rich1.Lines.Add('');
 Rich1.Lines.Add(TestRus);
 S := '';
 For I := 0 to Rich1.Lines.Count-1 do
   begin
     S0 := Rich1.Lines.Strings[I];
     For J := 1 to Length(S0) do
       begin
         C := S0[J];
         Try
         S := S + RusLat(C);
         Except
           On eConvertError do S := S + C;
         End;
       end;
     Rich2.Lines.Add(S);
   end;
end;      { TTransLitFrm.RusLatButClick }

(*
procedure TTransLitFrm.LatRusButClick(Sender: TObject);
Var
 I, J : Integer;
 C : Char;
 S, S0 : String;
begin
 Rich2.Clear;
 Rich1.Clear;
 Rich1.Lines.Add('');
 Rich1.Lines.Add(TestLat);
 S := '';
 For I := 0 to Rich1.Lines.Count-1 do
   begin
     S0 := Rich1.Lines.Strings[I];
     For J := 1 to Length(S0) do
       begin
         C := S0[J];
         Try
         S := S + LatRus(C);
         Except
           On eConvertError do S := S + C;
         End;
       end;
     Rich2.Lines.Add(S);
   end;
end;      { TTransLitFrm.LatRusButClick }
*)

END.


Рамиль   (2007-01-16 13:22:00) [2]


> Как проверить соответствует или нет ?

Так это, ты же менеяшь, откуда я знаю?


Генрих   (2007-01-16 13:06:00) [3]


> Call AnsiReplaceText to scan the string specified by AText
> and replace all occurrences of the string specified by AFromText
> with the string specified by AToText. Occurrences of AFromText
> are identified by a case-insensitive comparison that uses
> the current system locale. The identification of substrings
> is not recursive: if the substitution of AToText results
> in a new match for AFromText, that match is not replaced.
>


В принципе перевод понял, вот только не догнал смысл.

Если одному русскому символу соот. один латинский

Как проверить соответствует или нет ?


Рамиль   (2007-01-16 12:59:00) [4]

Ты для каждой буквы вызываешь AnsiReplaceText?
сделай таблицу соответствия. Если одному русскому символу соот. один латинский, то можно заменять прямо в исходном, иначе копировать в другую строку.

P. S.
Call AnsiReplaceText to scan the string specified by AText and replace all occurrences of the string specified by AFromText with the string specified by AToText. Occurrences of AFromText are identified by a case-insensitivecomparison that uses the current system locale. The identification of substrings is not recursive: if the substitution of AToText results in a new match for AFromText, that match is not replaced.


Генрих   (2007-01-16 12:46:00) [5]

Мастера, еще вопросик если можно.

Задачка для колледжа была. Ввести русские буквы в Memo1.Text
а Memo2.Text должен отобразить тот же текст латинскими буквами.
Все идеально работает, за исключением одного.  Когда пишу текст таким образом: Привет !
Результат работы программы: privet !

то есть он весь текст приводит к нижнему регистру.

Я пытался делать так:

SL.Text:= (AnsiReplaceText(SL.Text,'п','p'));
SL.Text:= (AnsiReplaceText(SL.Text,'П','P'));

не катит. Подскажите плиз.


Генрих   (2007-01-16 12:36:00) [6]

2 stone

Спасибо !!!


stone   (2007-01-16 12:29:00) [7]

это не кавычка, а апостроф
двойной апостроф заключенный в апострофы вернет строковой символ апострофа
короче, в твоем случае пиши 4 апострофа подряд


Генрих   (2007-01-16 12:27:00) [8]

Опа, точно. Спасибо большое.


Генрих   (2007-01-16 12:26:00) [9]

2 stone

То есть мне нужно поставить между кавычками еще две кавычки ?


stone   (2007-01-16 12:22:00) [10]


> '   ?     '

''''


Наверх

Титульная страница Поиск, карта сайта Написать письмо