|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
преобразование букв вида \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
|
||||
|
||||
Аффтар, ты -- э-э-э, начинающий, наверное... В виде U+#### записываются кодовые точки Юникода, так что четырехзначные коды в твоем примере соответствуют кодировке UTF-16. Выкусывай хвост после '\U', и WideChar(HexToInt(хвост)) -- и будет твой символ.
Не стоит путать форумы с богадельнями. © Bargest |
Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
sashka (06.03.2015)
|
#3
|
|||
|
|||
Цитата:
Цитата:
ведь например: я нахожу строку \u0422\u0440\u0430\u0441\u0441\u0430 \u043f\u043e\u043b\u044f вклеиваю ее в Edit и нажав кнопку получаю в Lable "Трасса"-вот так хотелось бы. WideChar(HexToInt(хвост)) надож кудад вставить в свой код еще привязать свой "алфавит" к (хвост). а еще строчные буквы не воспринимает-это я пожалуй исправить в состоянии: так-как прописные в основном в искомых текстах. (а вообще на примерах я лучше понимаю.) |
#4
|
||||
|
||||
Цитата:
Ищешь '\' функцией PosEx, проверяешь через UpperCase проверяешь на равенство 'U', берешь следующие четыре символа функцией Copy, передаешь в HexToInt. Если потом сразу же не идет новый '\' -- это латиница, участок до следующего '\' или конца строки нужно копировать в результат без изменений. Не стоит путать форумы с богадельнями. © Bargest |
#5
|
|||
|
|||
Чайнику от чайника
Хоть Вы и просили, не посылать Вас..... по ссылкам, всё таки рискну. Тут Я сам там пасусь постоянно Здесь описано как откусить, и многое другое. Прошу прощения, ссылка была не рабочей. Поправил. Последний раз редактировалось Alex55V, 06.03.2015 в 14:02. |
Этот пользователь сказал Спасибо Alex55V за это полезное сообщение: | ||
sashka (06.03.2015)
|
#6
|
||||
|
||||
Да в приципе "свободночеловеческий" вариант с 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
|
|||
|
|||
Цитата:
Последний раз редактировалось sashka, 06.03.2015 в 14:09. |
#8
|
||||
|
||||
Код:
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
|
|||
|
|||
Screenshot_5.jpg
Цитата:
Код:
Label1.Caption:=(ScriptControl.Eval(Edit1.Text)); |
#10
|
|||
|
|||
Цитата:
что именно предполагается в моей неудачной попытке, кавычкм, точкаСзапятой ? Последний раз редактировалось sashka, 06.03.2015 в 15:48. |
#11
|
||||
|
||||
ну уж такие элементарные вопросы задавать... я уж и пример удалил
Код:
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
|
|||
|
|||
Цитата:
Элементарно для Вас и вас для меня пока все сложно и не понятно. спасибо огромное! буду разбирать пример, искать все что с ним связано. |
#13
|
|||
|
|||
всем спасибо! тема видимо закрыта.
направление решения задачи кардинально было изменено, хоть результат замечательный
добавил: Код:
procedure TForm1.Label1Click(Sender: TObject); var Clipboard: TClipboard; begin Clipboard:= TClipboard.Create; Clipboard.SetTextBuf(PChar(Label1.Caption)); FreeAndNil(Clipboard); end; |