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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.69 MB
Время: 0.043 c
15-1162888038
Думкин
2006-11-07 11:27
2006.11.26
Работа в Москве


15-1162910907
maksmib
2006-11-07 17:48
2006.11.26
Mirasoft HR Department..?


2-1162811723
Khabibulin
2006-11-06 14:15
2006.11.26
Нарисовать треугольник в Pascal е


15-1162968761
TIF
2006-11-08 09:52
2006.11.26
Moscow, Bill Gates &amp; Microsoft


2-1163006350
Greenchel
2006-11-08 20:19
2006.11.26
Цвет в RichEdit





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