Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с translit-ом , вопрос есть, как реализ, Есть код, плохо понял, надо реальзовать 
V
    Опции темы
virtul
  Дата 15.1.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Люди!
Тут такое дело: 
еcть прога типа Translit-ор. 
два МЕМО, кнопка, процедура конвертиции текста. 
пример работы: 
\\в первое мемо вводим текст 
МЕМО1: привет 
\\нажимаем на кнопку 
МЕМО2: privet 
\\ну и вот чё получаем 
--------------- 
я чё спрашиваю, я несовсем понял код.   smile  smile  smile  smile      
Котонибудь может мне его обьяснить. 
и как мне обойтись одним МЕМО?  smile 

для полной информации скажу есть два массива(стринг) , первый для русскиих символов, другой для англ. символов. 
массивы я писать небуду, там нужно весь алфавит переписывать но пример такой( rs:='Ы'; ens:='S';) 
------------- 
короче вот код: 
Код


procedure TForm.ButtonClick(Sender: TObject); 

var 
i : Integer; 
vtext: String; 
begin 
MemoDest.Clear; 
for i := 0 to MemoSource.GetTextLen - 1 do begin 
MemoSource.SelStart := i; 
MemoSource.SelLength := 1; 
vtext:= MemoSource.SelText; 
ConvertText(vtext); 
end; 
MemoSource.SelLength := 0; 
end; 



procedure TForm.ConvertText(vtext: String); 
var 
i : Integer; 
begin 
for i := 0 to 65 do begin 
if vtext= rs[i] then 
vtext:= ens[i]; 
end; 

MemoDest.Text := MemoDest.Text + vtext; 
end; 
---------- 
Обьясните что, чё делает и как одним МЕМО обойтись(может через переменную типа стринг, только как?)?
Основной вопрос: как одним МЕМО обойтись?
 smile 

Это сообщение отредактировал(а) Alexeis - 15.1.2009, 18:47
PM MAIL WWW   Вверх
virtul
Дата 15.1.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Всё, додумался! smile 
Кажись... smile  smile  smile  smile 
PM MAIL WWW   Вверх
Bose
Дата 15.1.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



virtul, пользуйся кнопкой "Код"
PM MAIL WWW Skype   Вверх
virtul
  Дата 16.1.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



НЕт! кажись не додумался!
короче вот так хотел сделать:
Код

var
  Form1: TForm1;
  rs: array [0..4] of string;
  ens: array [0..4] of string;

implementation

{$R *.dfm}

procedure TForm1.ConvertText(vtext: String);
var
i : Integer;
begin
for i := 0 to 4 do begin
if vtext= rs[i] then
vtext:= ens[i];
end;
Memo1.Text :=vtext;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
i : Integer;
vtext: String;
begin
vtext:= Memo1.Text;
Memo1.Clear;
for i := 1 to Length(vText) do
ConvertText(vtext);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
rs[0]:='q'; ens[0]:='й';
rs[1]:='w'; ens[1]:='ц';
rs[2]:='y'; ens[2]:='н';
rs[3]:='qwerty'; ens[3]:='йцукен';
rs[4]:='ytrewq'; ens[4]:='некуцй';
end;

пример проги прикрепил к сообщению под именем pr1t.exe
в этой проге переводится слово или буква из массива но ТОЛЬКО ОДНА(О)!Тоесть: q=й qwerty=йцукен ytrewq=некуцй qq=qq qwertyqwerty=qwertyqwerty и т.д
а мне нужно чтобы всё работало во всём тексте.
Я бы мог вместо этого написать
Код

Memo1.Text:=StringReplace(Memo1.Text,'qwerty','йцукен',[rfReplaceAll, rfIgnoreCase]);

но мне нужно с учётом регистра, именно поэтому я в массивах алфавита писал маленькие и БОЛЬШИЕ буквы.
А у функции StringReplace есть особенность: ей побарабану регист: ей что "QwErTy" или "QWERTY" или "qwerty" она всёравно переведёт это как "йцукен"
-----------------
Потом я пытался вместо: ConvertText(vtext); сделать так: ConvertText(vtext[i]);
но вышло ещё круче:
теперь прога переводит только последний символ(слово не обрабатывает): тоесть q=й qq=й y=н qwerty=н 
прикрепил к сообщению по именем: pr2t.exe
Чёто я запарился...smile  smile  чё мне делать?   smile 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Pr1_2t.zip 392,72 Kb
PM MAIL WWW   Вверх
virtul
  Дата 16.1.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



НЕт! кажись не додумался!
короче вот так хотел сделать:
Код

var
  Form1: TForm1;
  rs: array [0..4] of string;
  ens: array [0..4] of string;

implementation

{$R *.dfm}

procedure TForm1.ConvertText(vtext: String);
var
i : Integer;
begin
for i := 0 to 4 do begin
if vtext= rs[i] then
vtext:= ens[i];
end;
Memo1.Text :=vtext;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
i : Integer;
vtext: String;
begin
vtext:= Memo1.Text;
Memo1.Clear;
for i := 1 to Length(vText) do
ConvertText(vtext);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
rs[0]:='q'; ens[0]:='й';
rs[1]:='w'; ens[1]:='ц';
rs[2]:='y'; ens[2]:='н';
rs[3]:='qwerty'; ens[3]:='йцукен';
rs[4]:='ytrewq'; ens[4]:='некуцй';
end;

пример проги прикрепил к сообщению под именем pr1t.exe
в этой проге переводится слово или буква из массива но ТОЛЬКО ОДНА(О)!Тоесть: q=й qwerty=йцукен ytrewq=некуцй qq=qq qwertyqwerty=qwertyqwerty и т.д
а мне нужно чтобы всё работало во всём тексте.
Я бы мог вместо этого написать
Код

Memo1.Text:=StringReplace(Memo1.Text,'qwerty','йцукен',[rfReplaceAll, rfIgnoreCase]);

но мне нужно с учётом регистра, именно поэтому я в массивах алфавита писал маленькие и БОЛЬШИЕ буквы.
А у функции StringReplace есть особенность: ей побарабану регист: ей что "QwErTy" или "QWERTY" или "qwerty" она всёравно переведёт это как "йцукен"
-----------------
Потом я пытался вместо: ConvertText(vtext); сделать так: ConvertText(vtext[i]);
но вышло ещё круче:
теперь прога переводит только последний символ(слово не обрабатывает): тоесть q=й qq=й y=н qwerty=н 
прикрепил к сообщению по именем: pr2t.exe
 smile  smile Чёто я запарился... чё мне делать? smile 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Pr1_2t.zip 392,72 Kb
PM MAIL WWW   Вверх
Frees
Дата 16.1.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



в DRKB посмотри статью "}{0TT@БЬIЧ" там те только нужно FormCreate поправить
 



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
virtul
  Дата 16.1.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



смотрел, кстати от туда и взял, но мне нужно одним МЕМО, помоги... smile

Добавлено через 7 минут и 11 секунд
Я кажись додумался 
нужно было заменить:
Код

ConvertText(vtext);
//и
Memo1.Text :=vtext;

на это:
Код

ConvertText(vtext[i]);
//и
Memo1.Text :=memo1.text + vtext;
 smile  smile  smile  smile  smile  smile  smile  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.