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

Вниз

AnsiReplaceText   Найти похожие ветки 

 
Генрих   (2007-01-16 12:21) [0]

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

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,"Ъ",  "   ?     "));


 
stone ©   (2007-01-16 12:22) [1]


> "   ?     "

""""


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

2 stone

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


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

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


 
stone ©   (2007-01-16 12:29) [4]

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


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

2 stone

Спасибо !!!


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

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

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

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

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

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

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


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

Ты для каждой буквы вызываешь 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-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 13:06) [8]


> 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 13:22) [9]


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

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


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

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


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.




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

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

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1163058620
O.O
2006-11-09 10:50
2007.02.04
UPDATE


15-1168580679
0x07BBh
2007-01-12 08:44
2007.02.04
2006 год: Год, когда Россия учила Запад уму-разуму


2-1169152077
sinys
2007-01-18 23:27
2007.02.04
Почему-то происходит пересоздание формы


15-1168621866
AntiUser
2007-01-12 20:11
2007.02.04
Несколько уязвимостей в ядре Linux


2-1169061238
serko
2007-01-17 22:13
2007.02.04
Версия программы...





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