ss='';

 for (i=0;i<s.length;i++) {  //Цикл по всем символам в строке

  if (RusDict.Exists(s.charAt(i)))  //Проверяем наличие символа в словаре

   //Преобразуем i-й символ в Windows-кодировку

   ss+=RusDict.Item(s.charAt(i));

  else ss+=s.charAt(i);

 }

 return ss;

}

Как мы видим, эта функция преобразует переданную в качестве параметра строку следующим образом: все символы кириллицы в этой строке переводятся в Windows-кодировку, остальные символы остаются без изменений. Основным в функций DosToWin является использование объекта Dictionary (аналог ассоциативного массива) с именем RusDict. Этот объект формируется в функции MakeRusDict и содержит пары 'ключ'–'значение' для всех букв русского алфавита, причем в качестве ключа указывается буква в DOS-кодировке, а в качестве значения — символ с кодом, который соответствует этой букве в Windows-кодировке:

function MakeRusDict() {

 //Создаем объект Dictionary

 RusDict = WScript.CreateObject('Scripting.Dictionary');

 //Заполняем пары 'ключ' (символ в DOS-кодировке)-'значение' (символ в

 //Window-кодировке) для всех букв русского алфавита

 RusDict.add('Ђ', 'А'); RusDict.add('Ѓ', 'Б'); RusDict.add('‚', 'В');

 RusDict.add('ѓ', 'Г'); RusDict.add('„', 'Д'); RusDict.add('…', 'Е');

 RusDict.add('р', 'Ё'); RusDict.add('†', 'Ж'); RusDict.add('‡', 'З');

 RusDict.add('€', 'И'); RusDict.add('‰', 'Й'); RusDict.add('Љ', 'К');

 RusDict.add('‹', 'Л'); RusDict.add('Њ', 'М'); RusDict.add('Ќ', 'Н');

 RusDict.add('Ћ', 'О'); RusDict.add('Џ', 'П'); RusDict.add('ђ', 'Р');

 RusDict.add('‘', 'С'); RusDict.add('’', 'Т'); RusDict.add('“', 'У');

 RusDict.add('”', 'Ф'); RusDict.add('•', 'Х'); RusDict.add('–', 'Ц');

 RusDict.add('—', 'Ч'); RusDict.add('?', 'Ш'); RusDict.add('™', 'Щ');

 RusDict.add('љ', 'Ъ'); RusDict.add('›', 'Ы'); RusDict.add('њ', 'Ь');

 RusDict.add('ќ', 'Э'); RusDict.add('ћ', 'Ю'); RusDict.add('џ', 'Я');

 RusDict.add(' ', 'а'); RusDict.add('Ў', 'б'); RusDict.add('ў', 'в');

 RusDict.add('Ј', 'г'); RusDict.add('¤', 'д'); RusDict.add('Ґ', 'е');

 RusDict.add('с', 'ё'); RusDict.add('¦', 'ж'); RusDict.add('§', 'з');

 RusDict.add('Ё', 'и'); RusDict.add('©', 'й'); RusDict.add('Є', 'к');

 RusDict.add('«', 'л'); RusDict.add('¬', 'м'); RusDict.add('­', 'н');

 RusDict.add('®', 'о'); RusDict.add('Ї', 'п'); RusDict.add('а', 'р');

 RusDict.add('б', 'с'); RusDict.add('в', 'т'); RusDict.add('г', 'у');

 RusDict.add('д', 'ф'); RusDict.add('е', 'х'); RusDict.add('ж', 'ц');

 RusDict.add('з', 'ч'); RusDict.add('и', 'ш'); RusDict.add('й', 'щ');

 RusDict.add('к', 'ъ'); RusDict.add('л', 'ы'); RusDict.add('м', 'ь');

 RusDict.add('н', 'э'); RusDict.add('о', 'ю'); RusDict.add('п', 'я');

}

В функции DosToWin из VBScript-сценария StdIn1.vbs (листинг 2.15) реализован другой подход к переводу строки в Windows-кодировку, связанный с преобразованием ANSI-кодов символов:

Function DosToWin(s)

Dim i,k,ss

 ss=''

 For i=1 To Len(s)  ' Цикл по всем символам в строке

  k = Asc(Mid(s,i,1))  ' Определяем ANSI-код i-го символа

  ' Изменяем код k на код соответствующего символа в

  ' Windows-кодировке

  If (128 <= k) And (k <= 175) Then

   k=k+64

  ElseIf (224 <= k) And (k <= 239) Then

   k=k+16

  ElseIf k = 240 Then

   k=168

  ElseIf k = 241 Then

   k=184

  End If

  ss=ss+Chr(k)  ' Возвращаем преобразованную строку

 Next

 DosToWin=ss

End Function

Весь алгоритм этой функции состоит в вычислении по ANSI-коду буквы русского алфавита в DOS- кодировке кода символа в Windows-кодировке, соответствующего этой букве.

Листинг 2.14. Ввод одной строки с помощью метода StdIn.ReadLine (JScript)

/*******************************************************************/

/* Имя: StdIn1.js                                                  */

/* Язык: JScript                                                   */

/* Описание: Пример использования метода StdIn.ReadLine            */

/*******************************************************************/

var s,RusDict;  //Объявляем переменные

//Функция для создания объекта Dictionary с парами 'ключ-значение', где

//'ключ'-буква в DOS-кодировке, 'значение'- символ, соответствующий этой

//букве в Windows-кодировке

function MakeRusDict() {

  //Создаем объект Dictionary

 RusDict = WScript.CreateObject('Scripting.Dictionary');

 //Заполняем пары 'ключ' (символ в DOS-кодировке)-'значение' (символ в

 //Window-кодировке) для всех букв русского алфавита

 RusDict.add('Ђ', 'А'); RusDict.add('Ѓ', 'Б'); RusDict.add('‚', 'В');

 RusDict.add('ѓ', 'Г'); RusDict.add('„', 'Д'); RusDict.add('…', 'Е');

 RusDict.add('р', 'Ё'); RusDict.add('†', 'Ж'); RusDict.add('‡', 'З');

 RusDict.add('€', 'И'); RusDict.add('‰', 'Й'); RusDict.add('Љ', 'К');

 RusDict.add('‹', 'Л'); RusDict.add('Њ', 'М'); RusDict.add('Ќ', 'Н');

 RusDict.add('Ћ', 'О'); RusDict.add('Џ', 'П'); RusDict.add('ђ', 'Р');

 RusDict.add('‘', 'С'); RusDict.add('’', 'Т'); RusDict.add('“', 'У');

 RusDict.add('”', 'Ф'); RusDict.add('•', 'Х'); RusDict.add('–', 'Ц');

 RusDict.add('—', 'Ч'); RusDict.add('?', 'Ш'); RusDict.add('™', 'Щ');

 RusDict.add('љ', 'Ъ'); RusDict.add('›', 'Ы'); RusDict.add('њ', 'Ь');

 RusDict.add('ќ', 'Э'); RusDict.add('ћ', 'Ю'); RusDict.add('џ', 'Я');

 RusDict.add(' ', 'а'); RusDict.add('Ў', 'б'); RusDict.add('ў', 'в');

 RusDict.add('Ј', 'г'); RusDict.add('¤', 'д'); RusDict.add('Ґ', 'е');

 RusDict.add('с', 'ё'); RusDict.add('¦', 'ж'); RusDict.add('§', 'з');

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату