Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

Транслит   Найти похожие ветки 

 
Greenchel ©   (2006-11-08 22:06) [0]

Существует строка вида: Ghbdtn
Как перевести в нормальный вид?


 
Dmitrij_K   (2006-11-08 22:15) [1]

что значит "нормальный"???


 
Greenchel ©   (2006-11-08 22:17) [2]

Ghbdtn = Привет
Gjrf = Пока
(Руские слова написаны английскими буквами)


 
Desdechado ©   (2006-11-08 22:20) [3]

Это НЕ транслит.
Транслит - это vot takie slova.
А у тебя что-то не то.
Хотя можешь составить таблицу соответствия. Но помни, чтоне у всех qwerty-клавиатуры.


 
Greenchel ©   (2006-11-08 22:22) [4]

В общем во всех чатах такая вещь именуется "2RUS".
Насколько мне известно надо создать массив, а затем согласно массиву заменять буквы:
"Q" => "Й"
"W" => "Ц"
"E" => "У" и т.д.
Вот как реализовать вот эту замену?


 
Percent   (2006-11-08 22:35) [5]

Вот как реализовать вот эту замену?

надо создать массив, а затем согласно массиву заменять буквы


 
Greenchel ©   (2006-11-08 22:37) [6]


> надо создать массив, а затем согласно массиву заменять буквы

я тоже самое написал выше :)
Кто-нибудь может хотя-бы на примере 1 буквы показать метод реализации?


 
Desdechado ©   (2006-11-08 22:45) [7]

> Кто-нибудь может
Может.

А ты не хочешь изложить код СВОИХ попыток?


 
Percent   (2006-11-08 22:46) [8]

я тоже самое написал выше

Я скопировал.

Кто-нибудь может хотя-бы на примере 1 буквы показать метод реализации?

Ты же правильно все написал.
Реализовывай.
Что-то не получится - спрашивай.
А ты, я так понимаю, хочешь, чтобы за тебя это сделал кто-то другой.

Подсказка: Задай матрицу трансформации символов [0..1, 0..104], где 0..1 - количество вариантов, 0..104 - количество клавиш на 105 кнопочной клавиатуре (их в твоей программе будет меньше - тебе же не надо обрабатывать несимвольные клавиши); числа могут отличаться, в зависимости от твоих потребностей. Когда надо будет преобразовать строку, в цикле пройдись по всем символам этой строки, и для каждого символа найди соответствие в матрице трансформации, а потом замени символ в строке на ассоциированный  символ.


 
Percent   (2006-11-08 22:47) [9]

тебе же не надо обрабатывать несимвольные клавиши

читать как "тебе же не надо обрабатывать символьные клавиши"


 
Greenchel ©   (2006-11-08 22:50) [10]

Ок, попробую сейчас


 
Greenchel ©   (2006-11-08 23:09) [11]

var ru: array[1..33] of string;
en: array[1..33] of string;
begin
ru[1]:= "q";
ru[2]:= "w";
ru[3]:= "e";
ru[5]:= "r";
ru[6]:= "t";
ru[7]:= "y";
ru[8]:= "u";
ru[9]:= "i";
ru[10]:= "o";
ru[11]:= "p";
ru[12]:= "[";
ru[13]:= "]";
ru[14]:= "a";
ru[15]:= "s";
ru[16]:= "d";
ru[17]:= "f";
ru[18]:= "g";
ru[19]:= "h";
ru[20]:= "j";
ru[21]:= "k";
ru[22]:= "l";
ru[23]:= ";";
ru[24]:= """;
ru[25]:= "z";
ru[26]:= "x";
ru[27]:= "c";
ru[28]:= "v";
ru[29]:= "b";
ru[30]:= "n";
ru[31]:= "m";
ru[32]:= ",";
ru[33]:= "`";
end;

Создал такой массив, а он не хочет пропускать ru[24], в чём дело? :(


 
Percent   (2006-11-08 23:14) [12]

Потому что у тебя там кавычка незакрытая.
Напиши:

ru[24]:= """"; {четыре одиночных кавычки}


 
Greenchel ©   (2006-11-08 23:15) [13]

так мне это... на знаке <"> буква <Э>


 
Percent   (2006-11-08 23:17) [14]

И еще.
Используй константный массив.
Типа такого:

const
 Digits: array[0..9] of Char = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");


(С) Borland Delphi Help


 
Percent   (2006-11-08 23:19) [15]

Так и задавай русские буквы в массиве ru, а английские - в массиве en.

en[24] := """";
ru[24] := "э";


 
Percent   (2006-11-08 23:22) [16]

И лучше использовать ASCII коды в качестве индексов массива. Один массив для преобразования ru -> en. Другой - для en -> ru. Тогда поиска не надо будет. Код символа будет индексом.


 
Percent   (2006-11-08 23:24) [17]

То есть, не ASCII, а ANSI, русскую кодировку, или Windows-1251, что почти то же, что и ANSI...


 
Ketmar ©   (2006-11-09 01:02) [18]

>[14] Percent 8-Nov-2006, 23:17
>Используй константный массив.
>Типа такого:
const
Digits: array[0..9] of Char = "0123456789";

%-)

и всё равно неправильно. правильно -- это API. и на основе скан-кодов преобразовывать.


 
API ©   (2006-11-09 09:48) [19]

правильно -- это API.

Звали?

на основе скан-кодов преобразовывать

Ну и какой тогда будет алгоритм преобразования строки "йцукен" в строку "qwerty"?


 
Anatoly Podgoretsky ©   (2006-11-09 09:53) [20]

> API  (09.11.2006 09:48:19)  [19]

Простой ch := Tbl[Ch];


 
API ©   (2006-11-09 10:07) [21]

ch := Tbl[Ch];

Ch - не является скан-кодом клавиатуры (как посоветовано в [18])...
Да и регистр при использовании скан-кодов теряется...


 
Anatoly Podgoretsky ©   (2006-11-09 10:25) [22]

> API  (09.11.2006 10:07:21)  [21]

> Ch - не является скан-кодом клавиатуры

Ch - является идентификатором.


 
Anatoly Podgoretsky ©   (2006-11-09 10:27) [23]


> и на основе скан-кодов преобразовывать

А знание какому скан-коду соответствует тот или другой символ, он откуда возьмет.


 
Anatoly Podgoretsky ©   (2006-11-09 10:31) [24]

> API  (09.11.2006 10:07:21)  [21]

Я бы не советовал использовать скан коды, да и откуда они у автора, у него есть строка. Значит работать со значениями символов, а это одна строка кода.


 
API ©   (2006-11-09 10:58) [25]

Я бы не советовал использовать скан коды

Я - тоже.
Это просто был "наш ответ Чемберлену", то есть, на [18]...


 
Anatoly Podgoretsky ©   (2006-11-09 11:11) [26]

API ©   (09.11.06 10:58) [25]
Это я понял, в любом случае неодназначность, как с кодами, так и символами - это надо отдать на откуп пользователю.


 
Ketmar ©   (2006-11-09 12:07) [27]

>[19] API(c) 9-Nov-2006, 09:48
>Ну и какой тогда будет алгоритм преобразования строки "
>йцукен" в строку "qwerty"?
именно тот, который успешно используется в моём переключателе раскладок.

>[23] Anatoly Podgoretsky(c) 9-Nov-2006, 10:27
>А знание какому скан-коду соответствует тот или другой
>символ, он откуда возьмет.
это винда знает. она умная.

>[24] Anatoly Podgoretsky(c) 9-Nov-2006, 10:31
>Я бы не советовал использовать скан коды, да и откуда они
>у автора, у него есть строка.
а ещё есть OS Windows и её API.

>[25] API(c) 9-Nov-2006, 10:58
>Я - тоже.
ну-ну. а о том, что клавиатуры -- они не только стандарта "qwerty" бывают -- осведомлён?

>[26] Anatoly Podgoretsky(c) 9-Nov-2006, 11:11
>Это я понял, в любом случае неодназначность, как с кодами,
>так и символами - это надо отдать на откуп пользователю.
а не операционке? кому, как не ей лучше знать соответствия?


 
Anatoly Podgoretsky ©   (2006-11-09 12:15) [28]

> Ketmar  (09.11.2006 12:07:27)  [27]

> а ещё есть OS Windows и её API.

И чем оно поможет

> Существует строка вида: Ghbdtn


 
Ketmar ©   (2006-11-09 12:47) [29]

>[28] Anatoly Podgoretsky(c) 9-Nov-2006, 12:15
Ghbdtn=Привет

вот этот "Привет" только что был перекодирован моим переключателем раскладок. никаких таблиц перекодировки в нём нет. ему вообще плевать на таблицы и установленые языки, он clipboard из предыдущей раскладки переводит в текущую. всё.


 
Anatoly Podgoretsky ©   (2006-11-09 12:56) [30]


> он clipboard из предыдущей раскладки переводит в текущую.
>  всё.

Ух ты какой хитрый, я бы не догадался так сделать.


 
Ketmar ©   (2006-11-09 13:05) [31]

>[30] Anatoly Podgoretsky(c) 9-Nov-2006, 12:56
>Ух ты какой хитрый, я бы не догадался так сделать.
я бы тоже. юзер пинал. %-)


 
Anatoly Podgoretsky ©   (2006-11-09 13:20) [32]

Неординарный подход.
Насколько эффективно на разных локализациях?


 
Reindeer Moss Eater ©   (2006-11-09 13:23) [33]

Выставить старший бит у каждого "английского"  символа в 1.
Получим русский текст в koi8r
Далее делаем перекодировку в 1251 и - вуаля.


 
*Стажер*   (2006-11-09 13:26) [34]

program Layout;

uses
 windows, Messages, ShellApi, SysUtils, Clipbrd;

{$R *.RES}

const CharEngRus: array [32..126] of byte =
($20,$21,$DD,$B9,$3B,$25,$3F,$FD,$28,$29,$2A,{*}
$2B,$E1,$2D,$FE,$2E,$30,$31,$32,$33,$34,$35, {5}
$36,$37,$38,$39,$C6,$E6,$C1,$3D,$DE,$2C,$22,{@}
$D4,$C8,$D1,$C2,$D3,$C0,$CF,$D0,$D8,$CE,$CB,{K}
$C4,$DC,$D2,$D9,$C7,$C9,$CA,$DB,$C5,$C3,$CC, {V}
$D6,$D7,$CD,$DF,$F5,$5C,$FA,$3A,$5F,$B8,$F4,{a}
$E8,$F1,$E2,$F3,$E0,$EF,$F0,$F8,$EE,$EB,$E4,{l}
$FC,$F2,$F9,$E7,$E9,$EA,$FB,$E5,$E3,$EC,$F6,{w}
$F7,$ED,$FF,$D5,$2F,$DA,$A8 );

var
WindowHandle, EditHandle: HWnd;
Instance: HWnd; {дескриптор модуля приложения}
WindowClass: TWndClass;  {класс окна приложения}
FHandle: HWnd;  {дескриптор окна приложения}
mesg: TMsg; {сообщения приложения}
 Ico_Message: integer=wm_User; {сообщение от иконки окну}
noIconData: TNotifyIconData; {дескриптор структуры NotifyIconData}
HIcon1: hIcon; {дескриптор иконки}
 stClb:string;
 pstw:PWideChar;
 stw:WideString;
 stSize,i,n:integer; {размер строки и счетчики}
Version: TOSVersionInfo;
stHdl: THandle;
stPtr: Pointer;

function WindowProc (Hwn,msg,wpr,lpr: longint): longint; stdcall;
{обработка сообщений}
begin
 result:=defwindowproc(hwn,msg,wpr,lpr); {ищет стандартный обработчик}

 if Msg = wm_Destroy then  {если команда на закрытие}
 begin
       Shell_NotifyIcon(NIM_Delete,@noIconData); {удаляем иконку}
       UnregisterHotKey(FHandle, 1); {убираем горячую клавишу}
       halt; {закрываем программу}
 end;

 if Msg = Ico_Message then  {если это сообщение от иконки}
 begin
   if lpr=WM_RBUTTONUP then {была отпущена левая кнопка}
   begin
     if MessageBox(FHandle,"Вы хотите закрыть программу Layout?",
     "Warning",MB_YESNO)=idYES then
     begin
       Shell_NotifyIcon(NIM_Delete,@noIconData); {удаляем иконку}
       UnregisterHotKey(FHandle, 1); {убираем горячую клавишу}
       halt; {закрываем программу}
     end;
   end;
 end;

 if Msg = WM_HOTKEY then  {если нажата горячая клавиша}
 if wpr=1 then {и ее номер 1}
 begin
   WindowHandle := GetForegroundWindow;  {активное окно}
   EditHandle := GetTopWindow(WindowHandle); {активный элемент}
        keybd_event(VK_CONTROL,0,0,0); { нажатие клавиши Ctrl}
        keybd_event(ord("C"),0,0,0); {нажатие клавиши "C"}
        keybd_event(ord("C"),0,KEYEVENTF_KEYUP,0); {отпускание "C"}
        keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); {отпускание Ctrl }
        SendMessage(EditHandle,WM_COMMAND, $00010043, $00000000); {ускоритель}
   Sleep(100);
   Clipboard.Open;
   if Clipboard.HasFormat(CF_UNICODETEXT) then
   begin
      stHdl:=Clipboard.GetAsHandle(CF_UNICODETEXT);
      stPtr:=GlobalLock(stHdl);
      pstw:=stPtr;
      stw:=pstw;
      GlobalUnlock(stHdl);
      stClb:=stw;
   end
   else stClb:=Clipboard.AsText; {забрали в строку чистый текст}
      if stClb="" then exit; {на случай, если в буфере пусто}
      i:=1; {ищем первый буквенный символ}
      while (not (stClb[i] in ["A".."Z"])) and (not (stClb[i] in ["a".."z"])) and
      (not (stClb[i] in ["А".."я"])) do
      begin i:=i+1; if i>length(stClb) then exit end; {если ни одного буквенного символа, то на выход}
             {определям раскладку по найденному буквенному символу:}
      if (stClb[i] in ["A".."Z"]) or (stClb[i] in ["a".."z"])
      then {то это английский}
      begin
         for n:=1 to length(stClb) do
         if (ord(stClb[n])>=32) and (ord(stClb[n])<=127) then
         stClb[n]:=chr(CharEngRus[ord(stClb[n])]); {заменяем символом из таблицы}
      end
      else {это русский}
      begin
        for n:=1 to length(stClb) do
        for i:=32 to 126 do
        begin   {обратный поиск по таблице}
          if ord(stClb[n])=CharEngRus[i] then
          begin stClb[n]:=chr(i); break; end;
        end;
      end;
   Version.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
   GetVersionEx(Version);
   if Version.dwPlatformId = VER_PLATFORM_WIN32_NT then
   begin {это NT}
     with Clipboard do
     begin
        stSize:=length(stClb)*sizeof(WideChar)+2; {длина строки в Unicode}
        stHdl:=GlobalAlloc(GMEM_MOVEABLE,stSize); {отводим память в куче}
        stPtr:=GlobalLock(stHdl); {указатель на эту память}
        MultiByteToWideChar(CP_ACP,0,PChar(stClb),Length(stClb),stPtr,stSize);
                                     {преобразуем в Unicode}
        Clear; {очищаем буфер}
        Clipboard.SetAsHandle(CF_UNICODETEXT,stHdl); {забираем в него}
        GlobalUnlock(stHdl);
        GlobalFree(stHdl);   {очищаем память}
     end;
   end else {это 9х}
   Clipboard.AsText:=stClb; {просто забрали обратно в буфер}
   Clipboard.Close;
      {вставляем поверх выделенного:}
      keybd_event(VK_CONTROL,0,0,0); { нажатие клавиши Ctrl}
      keybd_event(ord("V"),0,0,0); {нажатие клавиши "V"}
      keybd_event(ord("V"),0,KEYEVENTF_KEYUP,0); {отпускание "V"}
      keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); {отпускание Ctrl }
      SendMessage(EditHandle,WM_COMMAND, $00010043, $00000000); {ускоритель}
 end {hotkey}
end;

procedure CreateMyicon;
begin
 HIcon1:=LoadIcon(Instance,"MAINICON"); {получаем дескриптор иконки}
with noIconData do begin
 cbSize:=Sizeof(TNotifyIconData); {размер структуры}
 Wnd:=FHandle; {дескриптор окна}
 uID:=0; {единственная иконка}
 UFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP; {взводим все флаги}
 SzTip:="Language Layout"; {всплывающая подсказка}
 HIcon:=HIcon1; {дескриптор иконки}
 uCallBackMessage:=Ico_Message;{oпределяемое пользователем сообщение}
end;
Shell_NotifyIcon(NIM_ADD,@noIconData); {создали иконку}
end;

begin
instance :=GetModuleHandle(nil); {получаем дескриптор модуля}
with WindowClass do {задаем свойства окна}
begin
     style:=CS_HRedraw or CS_VRedraw;
     Lpfnwndproc:=@windowproc;
     Hinstance:=Instance;
     HbrBackground:= color_btnface;
     LpszClassName:="DX";
     Hcursor:=LoadCursor(0,IDC_ARROW);
     hIcon:=LoadIcon(Instance,"MAINICON");
end;

RegisterClass(WindowClass);  {регистрируем класс}

FHandle:=CreateWindowEx (0,"DX","",WS_POPUP, 5,5, 200, 200,0,0,instance, nil);
{получаем дескриптор окна}

RegisterHotKey(FHandle, 1 ,MOD_CONTROL, vk_F12); {регистрируем клавишу Ctrl-F12}

CreateMyicon; {создаем иконку}

while (GetMessage(mesg, 0, 0, 0)) do  {обработка сообщений}
 begin
  TranslateMessage(mesg);
  DispatchMessage (mesg);
 end;
end.


 
*Стажер*   (2006-11-09 13:27) [35]


> [34]

Пример надыбанный, не помню откуда


 
Ketmar ©   (2006-11-09 13:32) [36]

>[32] Anatoly Podgoretsky(c) 9-Nov-2006, 13:20
>Насколько эффективно на разных локализациях?
честно признаться, не знаю. судя по моим тестам (далеко не полным) -- перекодировка из $419 в $409 и назад работает стабильно, если обе установлены. %-) какая локаль винды при этом -- не важно.
по идее должно работать между любыми локалями -- никаких причин для глюков не вижу. кроме, правда, диакритических символов, набираемых несколькими нажатиями. на это я злобно положил. %-)
впрочем, для решения [0] способ вполне подходящий.

>[33] Reindeer Moss Eater(c) 9-Nov-2006, 13:23
???


 
Reindeer Moss Eater ©   (2006-11-09 13:36) [37]

>[33] Reindeer Moss Eater(c) 9-Nov-2006, 13:23
???


Да вроде все верно.
кои8р был придуман спецом для борьбы с почтовыми серверами откусывающими старший бит у символов письма.
Если в письме есть русская "Р" то после откусывания старшего бита она превратится в латинскую "Р" и текст останется читабельным.

Я же просто предложил проделать обратное.


 
han_malign ©   (2006-11-09 13:38) [38]

VkKeyScanEx
MapVirtualKeyEx


 
Anatoly Podgoretsky ©   (2006-11-09 13:59) [39]


> Reindeer Moss Eater ©   (09.11.06 13:36) [37]

Это легенда, а правда такая - был KOI-7 а KOI-8 сделан по анологии, но так как стыдно было признаться, то была придумана легенда.


 
Reindeer Moss Eater ©   (2006-11-09 14:13) [40]

рабочая легенда

win-1251 : "привет мир!"

Преобразуем в кои8-р
и далее каждому байту делаем and $7F

Получаем "PRIWET MIR!"


 
Anatoly Podgoretsky ©   (2006-11-09 14:19) [41]

> Reindeer Moss Eater  (09.11.2006 14:13:40)  [40]

> рабочая легенда

А теперь реальность, обрезав старший бит ты превращаешь в KOI-7


 
Reindeer Moss Eater ©   (2006-11-09 14:33) [42]

А если у меня в настройках почтового клиента указано, что слать почту как кои8-р, то это тоже на самом деле кои7?


 
Ketmar ©   (2006-11-09 14:34) [43]

>[38] han_malign(c) 9-Nov-2006, 13:38
>VkKeyScanEx
>MapVirtualKeyEx
VkKeyScanExW(), ToUnicodeEx().
%-) ну и CharUpperW() как финальный штрих.
я бы даже код дал, но сильно сомневаюсь, что автору вопроса поможет ассемблерный исходник. %-)


 
Ketmar ©   (2006-11-09 14:35) [44]

кстати. не заметил я сразу (кому-то повезло). какое отношение поле "сабж" имеет к [0]? %-)


 
Anatoly Podgoretsky ©   (2006-11-09 14:48) [45]

> Reindeer Moss Eater  (09.11.2006 14:33:42)  [42]

Нет у тебя KOI-8
Отрежание бита к этому не относится, после отрезания бита это уже не KOI-8.


 
Greenchel ©   (2006-11-09 15:32) [46]

if s="q" then s="й"
if s="w" then s="ц"
if s="e" then s="у"
if s="r" then s="к"
if s="t" then s="е"
if s="y" then s="н"
if s="u" then s="г"
if s="i" then s="ш"
if s="o" then s="щ"
if s="p" then s="з"
if s="[" then s="х"
if s="]" then s="ъ"
if s="a" then s="ф"
if s="s" then s="ы"
if s="d" then s="в"
if s="f" then s="а"
if s="g" then s="п"
if s="h" then s="р"
if s="j" then s="о"
if s="k" then s="л"
if s="l" then s="д"
if s=";" then s="ж"
if s=""" then s="э"
if s="z" then s="я"
if s="x" then s="ч"
if s="c" then s="с"
if s="v" then s="м"
if s="b" then s="и"
if s="n" then s="т"
if s="m" then s="ь"
if s="," then s="б"
if s="." then s="ю"
if s="/" then s="."
               

if s="Q" then s="Й"
if s="W" then s="Ц"
if s="E" then s="У"
if s="R" then s="К"
if s="T" then s="Е"
if s="Y" then s="Н"
if s="U" then s="Г"
if s="I" then s="Ш"
if s="O" then s="Щ"
if s="P" then s="З"
if s="A" then s="Ф"
if s="S" then s="Ы"
if s="D" then s="В"
if s="F" then s="А"
if s="G" then s="П"
if s="H" then s="Р"
if s="J" then s="О"
if s="K" then s="Л"
if s="L" then s="Д"
if s="Z" then s="Я"
if s="X" then s="Ч"
if s="C" then s="С"
if s="V" then s="М"
if s="B" then s="И"
if s="N" then s="Т"
if s="M" then s="Д"

Вот по такому типу нужна функция замени, никак не пойму как реализовать :(


 
Ketmar ©   (2006-11-09 15:51) [47]

>[46] Greenchel(c) 9-Nov-2006, 15:32
никогда больше такое не показывай. трудолюбивость, применённая не к тому -- это хуже. чем лень.

хинт: массивы.


 
Ketmar ©   (2006-11-09 15:51) [48]

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


 
Greenchel ©   (2006-11-09 15:52) [49]


> хинт: массивы

А потом перебором? :(


 
Ketmar ©   (2006-11-09 16:06) [50]

>[49] Greenchel(c) 9-Nov-2006, 15:52
>А потом перебором? :(
ЧЕГО??? толстый намёк: в магазине хозтоваров есть мётлы.


 
guav ©   (2006-11-09 18:28) [51]

Жаль, KOI-7 не поддерживается windows, иначе я знал бы  решение в пару строк, но "системное" ;-)
Хотя, может можно установить свою кодировку ;-)


 
Anatoly Podgoretsky ©   (2006-11-09 19:01) [52]

Ты наверно про KOI8, KOI-7 преобразовывается обратным способом, как превратилось, так и обратно.


 
Percent   (2006-11-09 19:04) [53]

KOI-7 не поддерживается windows

Поддерживается.


 
guav ©   (2006-11-09 19:08) [54]

> [53] Percent   (09.11.06 19:04)

Как ?
Приведи пример, или ссылку на документацию.

Какой код её, для начала ?


> [52] Anatoly Podgoretsky ©   (09.11.06 19:01)

KOI-8 поддерживается (в моём узком понимании термина "поддреживается").

> KOI-7 преобразовывается обратным способом, как превратилось,
> так и обратно.

KOI-7 таки не поддерживается напрямую.


 
Percent   (2006-11-09 19:10) [55]

KOI-8 поддерживается

Сам ответил...


 
guav ©   (2006-11-09 19:16) [56]

> [55] Percent   (09.11.06 19:10)

Таки я про непосредственную подднржку KOI-7 которой нет.
Иначе можно было бы считать, что любая кодировка поддерживается.


 
Anatoly Podgoretsky ©   (2006-11-09 19:18) [57]

KOI-8 поддерживается на уровне преобразований


 
Percent   (2006-11-09 19:24) [58]

Таки я про непосредственную подднржку KOI-7 которой нет

Что значит "непосредственная поддержка"?


 
Ketmar ©   (2006-11-09 19:51) [59]

>[58] Percent 9-Nov-2006, 19:24
>Что значит "непосредственная поддержка"?
см. [57]. мы тут недавно выяснили (guav, собственно %-) что -- к нашему удивлению -- писать процедуры преобразования из/в КОИ-8 не надо. всё уже написано микрософтом.


 
Anatoly Podgoretsky ©   (2006-11-09 20:13) [60]

> Ketmar  (09.11.2006 19:51:59)  [59]

И мною на основании его информации это используется. Не потребовалось использовать свой старый модуль.


 
Ketmar ©   (2006-11-09 20:57) [61]

скоро окажется, что автоопределение кодировки тоже давно написано. а мы всё по-старинке...
%-)


 
Anatoly Podgoretsky ©   (2006-11-09 21:05) [62]

> Ketmar  (09.11.2006 20:57:01)  [61]

Оно никогда не будет написано, ИИ не хватит, есть более или менее удачные решения, у того же Микрософт (это означает, что уже
написано :-)


 
Ketmar ©   (2006-11-09 21:14) [63]

>[62] Anatoly Podgoretsky(c) 9-Nov-2006, 21:05
>Оно никогда не будет написано, ИИ не хватит
на уровне FAR"а вполне достаточно. %-)

>означает, что уже написано :-)
только вот нет функции в API -- DetectCodeTable(). или я не нашёл. %-)


 
Anatoly Podgoretsky ©   (2006-11-09 21:26) [64]

> Ketmar  (09.11.2006 21:14:03)  [63]

Про перекодировку КОИ ты видел :-)


 
Chort ©   (2006-11-09 21:31) [65]

Если нужен транслит, то

unit Unit1;

interface

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

type
 TfmMain = class(TForm)
   Memo1: TMemo;
   Memo2: TMemo;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
 public
 end;

var
 fmMain: TfmMain;

implementation

{$R *.DFM}

function Transliterate(s: string): string;
var
 i: integer;
 t: string;
begin
 for i:=1 to Length(s) do
   begin
     case s[i] of
       "&#224;": t:=t+"a";
       "&#225;": t:=t+"b";
       "&#226;": t:=t+"v";
       "&#227;": t:=t+"g";
       "&#228;": t:=t+"d";
       "&#229;": t:=t+"e";
       "&#184;": t:=t+"ye";
       "&#230;": t:=t+"zh";
       "&#231;": t:=t+"z";
       "&#232;": t:=t+"i";
       "&#233;": t:=t+"y";
       "&#234;": t:=t+"k";
       "&#235;": t:=t+"l";
       "&#236;": t:=t+"m";
       "&#237;": t:=t+"n";
       "&#238;": t:=t+"o";
       "&#239;": t:=t+"p";
       "&#240;": t:=t+"r";
       "&#241;": t:=t+"s";
       "&#242;": t:=t+"t";
       "&#243;": t:=t+"u";
       "&#244;": t:=t+"f";
       "&#245;": t:=t+"ch";
       "&#246;": t:=t+"z";
       "&#247;": t:=t+"ch";
       "&#248;": t:=t+"sh";
       "&#249;": t:=t+"ch";
       "&#250;": t:=t+"""";
       "&#251;": t:=t+"y";
       "&#252;": t:=t+"""";
       "&#253;": t:=t+"e";
       "&#254;": t:=t+"yu";
       "&#255;": t:=t+"ya";
       "&#192;": T:=T+"A";
       "&#193;": T:=T+"B";
       "&#194;": T:=T+"V";
       "&#195;": T:=T+"G";
       "&#196;": T:=T+"D";
       "&#197;": T:=T+"E";
       "&#168;": T:=T+"Ye";
       "&#198;": T:=T+"Zh";
       "&#199;": T:=T+"Z";
       "&#200;": T:=T+"I";
       "&#201;": T:=T+"Y";
       "&#202;": T:=T+"K";
       "&#203;": T:=T+"L";
       "&#204;": T:=T+"M";
       "&#205;": T:=T+"N";
       "&#206;": T:=T+"O";
       "&#207;": T:=T+"P";
       "&#208;": T:=T+"R";
       "&#209;": T:=T+"S";
       "&#210;": T:=T+"T";
       "&#211;": T:=T+"U";
       "&#212;": T:=T+"F";
       "&#213;": T:=T+"Ch";
       "&#214;": T:=T+"Z";
       "&#215;": T:=T+"Ch";
       "&#216;": T:=T+"Sh";
       "&#217;": T:=T+"Ch";
       "&#218;": T:=T+"""";
       "&#219;": T:=T+"Y";
       "&#220;": T:=T+"""";
       "&#221;": T:=T+"E";
       "&#222;": T:=T+"Yu";
       "&#223;": T:=T+"Ya";
     else
       t:=t+s[i];
     end;
   end;
 Result:=t;
end;

procedure TfmMain.Button1Click(Sender: TObject);
var
 i: integer;
begin
 Memo2.Lines.Clear;
 for i:=0 to Memo1.Lines.Count-1 do
   Memo2.Lines.Add(Transliterate(Memo1.Lines.Strings[i]));
end;

end.

Только русские буквы по-поганились во время копирования. Впрочем там простой перебор алфавита


 
Ketmar ©   (2006-11-09 21:56) [66]

>[65] Chort(c) 9-Nov-2006, 21:31
>Если нужен транслит, то
откуда вы этот "код" выковыриваете-то, а? пожизненый эцих.


 
Chort ©   (2006-11-09 22:01) [67]


> откуда вы этот "код" выковыриваете-то, а? пожизненый эцих.

Билл Гейтс на мыло вчера прислал:)
http://www.delphi.int.ru/files/sources/sources_t/transliterator.zip


 
Ketmar ©   (2006-11-09 22:12) [68]

>[67] Chort(c) 9-Nov-2006, 22:01
>transliterator.zip
если это оно, то того, кто туда сие положил, надо медленно расстрелять без права апелляции. я в какой-то ветке недавно уже приводил нормальный код, а не эту страхолюдину.


 
Chort ©   (2006-11-09 22:16) [69]


> если это оно, то того, кто туда сие положил, надо медленно
> расстрелять без права апелляции. я в какой-то ветке недавно
> уже приводил нормальный код, а не эту страхолюдину.

Выложи в этой ветке


 
Ketmar ©   (2006-11-09 22:28) [70]

что=то вроде этого (править лень %-):
function TransStr (const s: string): string;
const
 rus: string = "ЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮЁІ";
 tr: string = "%cukeng+-zh""ejdlorpavyf*$smit""b#^i";
var
 f, c: Integer;
 up: Boolean;
 i: string;
 ch: Char;
begin
 result := s;
 f := 1; while f <= Length(result) do
 begin
   if result[f] < " " then result[f] := "_";
   ch := ANSIUpperCase(result[f]);
   c := Pos(ch, rus);
   if c < 1 then Inc(f)
   else
   begin
     i := tr[c]; up := (ch = result[f]);
     case i[1] of
       "%": i := "i";
       "+": i := "sh";
       "-": i := "sch";
       "*": i := "ia";
       "$": i := "ch";
       "#": i := "iu";
       "^": i := "io";
     end;
     if up then
     begin
       if f = 1 then i[1] := ANSIUpperCase(i[1])[1] else i := ANSIUpperCase(i);
     end;
     Delete(result, f, 1);
     Insert(i, result, f);
   end;
 end;
end;


 
guav ©   (2006-11-09 22:31) [71]

В продолжение оффтопика про кои8, я таки нашел функцию, позволяющую определить, существует ли кодировка - называется как ни странно IsValidCodePage.
Про "интеллект", определяющий раскладку, нашел только для Unicode (IsTextUnicode с IS_TEXT_UNICODE_STATISTICS).
Но т.к. IE все кодировки знает и кое-как определяет кодировку, можно попробовать через него.

Всё ещё интересует возможность добавить свою кодировку, так и задачу транслита и сабжевую задачу можно было бы решить красиво...


 
Ketmar ©   (2006-11-09 22:40) [72]

>[71] guav(c) 9-Nov-2006, 22:31
>называется как ни странно IsValidCodePage.
мда. %-)

>Но т.к. IE все кодировки знает и кое-как определяет
>кодировку, можно попробовать через него.
это зверство. %-)

>Всё ещё интересует возможность добавить свою кодировку,
>так и задачу транслита и сабжевую задачу можно было бы
>решить красиво...
сабжевая и так красиво решается. двумя api-функциями. я ж говорю -- могу исходник швырнуть. на ассемблере. %-)


 
Percent   (2006-11-09 22:41) [73]

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

Он ее (кодировку) из страницы берет, тег <META charset>.


 
Chort ©   (2006-11-09 22:50) [74]

Кстати кто знает как сделать чтоб в Macromedia Dreamweaver MX вместо &#209;,&#234; писались нормальные русские буквы?


 
guav ©   (2006-11-09 22:51) [75]

> [73] Percent   (09.11.06 22:41)

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


> [72] Ketmar ©   (09.11.06 22:40)


> сабжевая и так красиво решается. двумя api-функциями. я
> ж говорю -- могу исходник швырнуть. на ассемблере. %-)

Не надо.
Во первых этот исходник у меня уже есть.
Во вторых это не мне нужно, а автору ветки.
В третьих зачем кидать, ты уже достаточно сослался на него.
В четвёртых у меня таки подозрение, что автору он не сильно поможет.


> [72] Ketmar ©   (09.11.06 22:40)


> это зверство. %-)

Зверство - предложить МС Офис под это дело припрячь (в нём, кстати, много чего есть, мождет и определялка кодовой страницы завалялась).


 
Ketmar ©   (2006-11-10 02:20) [76]

>[75] guav(c) 9-Nov-2006, 22:51
>В четвёртых у меня таки подозрение, что автору он не
>сильно поможет.
а вот как раз поиздеваться.



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

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.069 c
15-1162767068
Горгер
2006-11-06 01:51
2006.11.26
Примеры к книге Краснова "Графика в OpenGL"


1-1160593484
flaxe
2006-10-11 23:04
2006.11.26
Встраивание в чужой процесс


3-1159352451
Stanislav
2006-09-27 14:20
2006.11.26
Работа через интернет


15-1162998173
well
2006-11-08 18:02
2006.11.26
BDS и Database Desktop


1-1160937815
Kolan
2006-10-15 22:43
2006.11.26
Дополнительный поток и Exception в главном. Что будет?