Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.03.2015, 10:39
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
По умолчанию преобразование букв вида \U0414 в русские

захотелось создать транслейтер для PHP(?)-алфавита сделать.
методом тыка написал это, но не допру, какие тут переменные писать, и что еще, а хотелось бы:
1) результат можно было скопировать.
2)регистр искомых букв не влиял на выполнение(U=u и остальные).
3)конвертация из Edit происходила строчкой, а не одной буквой.

Код:
procedure TForm1.Button1Click(Sender: TObject);

begin
if edit1.text='\U0430' then
label1.Caption:='a';
if edit1.text='\U0431' then
label1.caption:='б';
.........
label1.caption:='я';
if edit1.text='\U0410' then
label1.caption:='А';
if edit1.text='\U0411' then
label1.caption:='Б';
........
if edit1.text='\U042F' then
label1.caption:='Я';
 end;

end.

прошу не пинать меня по ссылкам и темам. не сразу сюда пришел: а после долгого поиска примеров и изучения кода. я даже не чайник: а кипятитьник
P.S.
спойлер, я так понял на этом форуме не работает, поэтому сократил аналогичные строки кода
Спасибо.

Последний раз редактировалось Admin, 06.03.2015 в 16:51.
Ответить с цитированием
  #2  
Старый 06.03.2015, 12:46
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Аффтар, ты -- э-э-э, начинающий, наверное... В виде U+#### записываются кодовые точки Юникода, так что четырехзначные коды в твоем примере соответствуют кодировке UTF-16. Выкусывай хвост после '\U', и WideChar(HexToInt(хвост)) -- и будет твой символ.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
Этот пользователь сказал Спасибо Freeman за это полезное сообщение:
sashka (06.03.2015)
  #3  
Старый 06.03.2015, 13:16
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Freeman
Аффтар, ты -- э-э-э, начинающий, наверное...
ну да, токо вот "на Свет появился"
Цитата:
Сообщение от Freeman
В виде U+#### записываются кодовые точки Юникода, так что четырехзначные коды в твоем примере соответствуют кодировке UTF-16. Выкусывай хвост после '\U', и WideChar(HexToInt(хвост)) -- и будет твой символ.
я так понял "выкусывать программно? но блин как?
ведь например:
я нахожу строку \u0422\u0440\u0430\u0441\u0441\u0430 \u043f\u043e\u043b\u044f вклеиваю ее в Edit и нажав кнопку получаю в Lable "Трасса"-вот так хотелось бы.
WideChar(HexToInt(хвост)) надож кудад вставить в свой код еще привязать свой "алфавит" к (хвост). а еще строчные буквы не воспринимает-это я пожалуй исправить в состоянии: так-как прописные в основном в искомых текстах.
(а вообще на примерах я лучше понимаю.)
Ответить с цитированием
  #4  
Старый 06.03.2015, 13:45
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от sashka
я так понял "выкусывать программно? но блин как?
А это уже домашнее задание. Ты же не хочешь всю жизнь быть начинающим?

Ищешь '\' функцией PosEx, проверяешь через UpperCase проверяешь на равенство 'U', берешь следующие четыре символа функцией Copy, передаешь в HexToInt. Если потом сразу же не идет новый '\' -- это латиница, участок до следующего '\' или конца строки нужно копировать в результат без изменений.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #5  
Старый 06.03.2015, 13:48
Alex55V Alex55V вне форума
Прохожий
 
Регистрация: 01.10.2014
Сообщения: 10
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Чайнику от чайника
Хоть Вы и просили, не посылать Вас..... по ссылкам, всё таки рискну.
Тут
Я сам там пасусь постоянно
Здесь описано как откусить, и многое другое.

Прошу прощения, ссылка была не рабочей. Поправил.

Последний раз редактировалось Alex55V, 06.03.2015 в 14:02.
Ответить с цитированием
Этот пользователь сказал Спасибо Alex55V за это полезное сообщение:
sashka (06.03.2015)
  #6  
Старый 06.03.2015, 14:02
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да в приципе "свободночеловеческий" вариант с PosEx вполне работоспособен, вот его реализация для D7
Код:
uses
  StrUtils;

function cnv(ds: string): string;
var
 i, b: integer;
 c: WideChar;
 n: string;
begin
  i:= 1;  b:= 1;
  while b < Length(ds) do
   begin
    i:= PosEx('\U', ds, i);
    Result:= Result + Copy(ds, b, i-b);
    Inc(i, 2);
    n:= Copy(ds, i, 4);
    b:= i + 4;
    c:= WideChar(StrToInt('$' + n));
    Result:= Result + c;
   end;
 Result:= Result + Copy(ds, b, Length(ds));
end;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Freeman (06.03.2015)
  #7  
Старый 06.03.2015, 14:06
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex55V
Чайнику от чайника
Хоть Вы и просили, не посылать Вас..... по ссылкам, всё таки рискну.
Тут
Я сам там пасусь постоянно
Здесь описано как откусить, и многое другое.

Прошу прощения, ссылка была не рабочей. Поправил.
ага, как раз писал об этом. Вы за мной подглядываете? )))) я как раз на этой странице и сидел )) ток пока ни понимаю ничо.

Последний раз редактировалось sashka, 06.03.2015 в 14:09.
Ответить с цитированием
  #8  
Старый 06.03.2015, 14:14
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Код:
uses
  MSScriptControl_TLB, ActiveX, ComObj,
...
var
  ScriptControl: IScriptControl;
begin
  OleInitialize(nil);
  ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
  ScriptControl.Language:='javascript';
  ShowMessage(ScriptControl.Eval('s = "\u041f\u0440\u0438\u0432\u0435\u0442"; s'));
end;

MSScriptControl_TLB импорт библиотеки типов
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
sashka (06.03.2015)
  #9  
Старый 06.03.2015, 15:40
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
По умолчанию

Screenshot_5.jpg
Цитата:
Сообщение от NumLock
Код:
uses
  MSScriptControl_TLB, ActiveX, ComObj,
...
var
  ScriptControl: IScriptControl;
begin
  OleInitialize(nil);
  ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
  ScriptControl.Language:='javascript';
  ShowMessage(ScriptControl.Eval('s = "\u041f\u0440\u0438\u0432\u0435\u0442"; s'));
end;

MSScriptControl_TLB импорт библиотеки типов
пытаюсь всунуть свой edit (один из вариантов):
Код:
Label1.Caption:=(ScriptControl.Eval(Edit1.Text));
но выдает (на скиншоте)
Ответить с цитированием
  #10  
Старый 06.03.2015, 15:44
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Код:
........
  ShowMessage(ScriptControl.Eval('s = "\u041f\u0440\u0438\u0432\u0435\u0442"; s'));
...
что здесь s?
что именно предполагается в моей неудачной попытке, кавычкм, точкаСзапятой ?

Последний раз редактировалось sashka, 06.03.2015 в 15:48.
Ответить с цитированием
  #11  
Старый 06.03.2015, 15:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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

Код:
var
  ScriptControl: IScriptControl;
begin
  OleInitialize(nil);
  ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
  ScriptControl.Language:='javascript';
  Label1.Caption:=ScriptControl.Eval('s = "'+Edit1.Text+'"; s');
end;

в Edit1 текст "\u041f\u0440\u0438\u0432\u0435\u0442" без кавычек
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
sashka (06.03.2015)
  #12  
Старый 06.03.2015, 15:59
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
ну уж такие элементарные вопросы задавать... я уж и пример удалил

Код:
var
  ScriptControl: IScriptControl;
begin
  OleInitialize(nil);
  ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
  ScriptControl.Language:='javascript';
  Label1.Caption:=ScriptControl.Eval('s = "'+Edit1.Text+'"; s');
end;

в Edit1 текст "\u041f\u0440\u0438\u0432\u0435\u0442" без кавычек
блин, всегото надо было плюсики по сторонам дабавить в первой моей попытке.
Элементарно для Вас и вас для меня пока все сложно и не понятно.
спасибо огромное! буду разбирать пример, искать все что с ним связано.
Ответить с цитированием
  #13  
Старый 06.03.2015, 16:40
sashka sashka вне форума
Прохожий
 
Регистрация: 06.03.2015
Сообщения: 7
Версия Delphi: Delphi XE7
Репутация: 10
Хорошо всем спасибо! тема видимо закрыта.

направление решения задачи кардинально было изменено, хоть результат замечательный
добавил:
Код:
procedure TForm1.Label1Click(Sender: TObject);
var
 Clipboard: TClipboard;
begin
 Clipboard:= TClipboard.Create;
 Clipboard.SetTextBuf(PChar(Label1.Caption));
 FreeAndNil(Clipboard);
end;
программка готова к использованию.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter