Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Визначення типу тексту і перетворення типу кодування тексту




ВСТУП

Мета методичних вказівок – оказати допомогу студентам при підготовці, виконанні та оформленні результатів виконання лабораторних робіт по дисципліні, основним призначенням якої є вивчення принципів побудови сучасних операційних систем та найбільш ефективного використання їх функцій при розробці програм та їх застосуванню.

Лабораторні роботи по дисципліні вчать практичному використанню теоретичних положень, які вивчені на лекціях, закріплюють та розширяють практичні навики, що були отримані на практичних заняттях  по курсу.

Кожна лабораторна робота потребує попередньої підготовки, а саме:

- вивчення теоретичного матеріалу;

- розробки алгоритмів вирішення задач, які треба виконати під час лабораторної роботи;

- розробка тестів для перевірки програм.

Усі лабораторні роботи виконуються з застосуванням ЕОМ. При цьому необхідно:

- виконувати правила техніки безпеки при роботі з ЕОМ;

- виконувати правила поведінки в лабораторії ЕОМ;

- приходити на заняття строго за розкладом;

- не допускається зміна прав доступу до системних ресурсів.

До роботи допускаються тільки підготовлені студенти, які склали та захистили програми. При допуску викладач перевіряє наявність цих програм та ступень самостійності їх складання. Студент самостійно виправляють помилки в програмі. Сама помилка та дії, що необхідні для її виправлення, заносяться в звіт по лабораторній роботі. Найбільш характерні помилки обговорюються з групою в ході виконання лабораторних робіт.

Якщо ЕОМ не вистачає для кожного студента, то лабораторну роботу виконує бригада. Звіт оформлюється один на бригаду, але кожний студент здає лабораторну роботу індивідуально.

Звіт повинен включати в себе:

- назву лабораторної роботи;

- мету лабораторної роботи;

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

В якості шаблону для підготовки звіту можна використовувати цю методичку в електронному вигляді , на титульному листі якої треба написати ПІБ авторів звіту.

Без наявності електронної копії звіту для поточної лабораторної роботі і всіх попередніх робіт лабораторна робота не приймається. Здача поточної лабораторної роботи може бути виконана в день виконання лабораторної роботи або під час наступної лабораторної роботи. Лабораторна робота, яка здається невчасно, не може бути оцінена високою оцінкою. При отриманні заліку по лабораторним роботам в кінці семестру студент повинен представити викладачу повний звіт по усім лабораторним роботам семестру в електронному вигляді. Всі лабораторні роботи здаються на ЕОМ.


 


РОЗРОБКА УНІВЕРСАЛЬНИХ ДОДАТКІВ ДЛЯ РІЗНИХ ТИПІВ КОДУВАНЬ СИМВОЛЬНОЇ ІНФОРМАЦІЇ

Мета роботи

ANSI кодування використовує один байт для завдання одного символу. Цього зовсім не достатньо для завдання текстів, в яких є речення на різних мовах. UNICODE кодування застосовує два байта при кодуванні одного символу. При такому кодуванні максимальна кількість кодів символів 65536 в порівнянні з 256 для ANSI кодування, що забезпечує можливість використання усіх наявних на сьогодні мов. Сьогодні більшість текстових файлів мають ANSI кодування. Кодування імен файлів залежить від наявної файлової системи, в електронних листах можна використовувати обидва типа кодування. таким чином, обидва способи кодування використовуються. Метою даної лабораторної роботи є навчитися опрацьовувати тексти для обох типів кодування, при чому сама програма не повинна залежати від обраного способу.

 

Методичні вказівки з організації самостійної роботи студентів

При підготовці до лабораторної роботи необхідно повторити матеріал відповідних лекцій та ознайомитися з [3, с. 11-27].

Типи даних char і wchar_t. Універсальне завдання типу

При ANSI-кодуванні використовується тип даних char. Даному типа char виділяється один байт. Приклади використання цього типу:

char symbol = ‘x’;

char array [] = “This is array”;

При UNICODE-кодуванні використовується тип даних wchar_t. Даному типа wchar_t виділяється два байти. Приклади використання цього типу:

wchar_t symbol = L‘x’;

wchar_t array [] = L“This is array”;

Для створення універсального тексту програми, який можна використовувати для обох типів кодування можна використовувати макроси.

Приклад макросу для універсальної об’яви типу даних і їх ініціалізації:

#ifdef UNICODE

typedef  wchar_t TCHAR ;

#define   TEXT(a) L##a

#else

typedef char   TCHAR ;

#define   TEXT(a) a

#endif

В цьому макросі визначено універсальний тип TCHAR, значення якого залежить від того, визначена змінна UNICODE чи ні. За допомогою макроса TEXT до визначення літералу додається буква L або ні.

Розгляньте цей макрос! Він повинен бути зрозумілим!

Використаємо цей макрос для визначення символу та рядка в універсальному вигляді.

TCHAR symbol = TEXT(‘x’);

TCHAR array [] = TEXT(“This is array”);

Цей код відповідає ANSI кодуванню, якщо не визначено змінної UNICODE, і UNICODE, якщо визначена ця змінна.

 

Функції для роботи з рядками для ANSI і UNICODE кодувань

Функції для роботи з рядками для ANSI кодування визначено в файлі заголовків string.h. Більшість функцій починається з префіксу str, наприклад, strcpy, strcat, strlen,… .

Функції для роботи з рядками для UNICODE кодування визначено в тому ж файлі заголовків string.h. Більшість функцій починається з префіксу wcs, наприклад, wcscpy, wcscat, wcslen,… .

Визначимо універсальну функцію, наприклад, для знаходження довжини рядка (в символах):

#ifdef UNICODE

#define   _tcslen             wcslen

#else

#define   _tcslen             strlen

#endif

Аналогічно можно визначити усі функції для роботи з рядками.

Файл tchar.h. Пошук імен для універсальних функцій

Усі ці типи і функції вже визначені в файлі tchar.h. Підключить цей файл та розгляньте його.

Для того, щоб знайти ім’я універсальної функції необхідно відкрити файл tchar.h, та знайти в ньому визначення функції для ANSI кодування. Це визначення має такий же формат, який ми використовували для визначення функції strlen. Отримайте універсальне ім’я функції. Визначить ім’я головної функції консольного додатку (яке відповідає функції main).

Визначення типу тексту і перетворення типу кодування тексту

Нехай задано текст. Необхідно визначити, яке кодування використовується для завдання цього тексту.

Для цього можно використовувати функцію IsTextUnicode:

BOOL IsTextUnicode( CONST VOID* pBuffer, int cb, LPINT lpi );

де:

pBuffer – буфер з символами;

cb           - кількість символів в буфері;

lpi      - ознаки, по яким визначається тип кодування. Кожна ознака задається одним бітом. На вході зазвичай задають 1 в усіх бітах, тобто число -1. На виході в 1 установлені ті біти, ознаки для яких підтверджені.

Відкрийте допомогу для цієї функції і розгляньте ці ознаки!

Функція повертає TRUE, якщо текст по більшості ознак типу Unicode, FALSE для типу ANSI.

Функція для перетворення ANSI в Unicode MultiByteToWideChar :

int MultiByteToWideChar(

UINT CodePage,       // Кодова сторінка, звичайно задається CP_ACP

DWORD dwFlags,             // 0

LPCSTR lpMultiByteStr,   // Рядок, який перетворюється

int cbMultiByte,             // Розмір (в байтах)

LPWSTR lpWideCharStr, // Рядок - результат

int cchWideChar            // Розмір в wchar_t символах.

);

Функція повертає кількість символів в рядку-результату.

 

Функція для перетворення Unicode в ANSI

int WideCharToMultiByte(    

UINT CodePage,     // Кодова сторінка, звичайно задається CP_ACP

DWORD dwFlags,           // 0

LPCWSTR lpWideCharStr, // Рядок, який перетворюється

int cchWideChar,              // // Розмір

LPSTR lpMultiByteStr,   // Рядок - результат

int cbMultiByte,           // // Розмір

LPCSTR lpDefaultChar, // Адреса символу, яким заміняється

     //символ, що перетворюється, якщо він не може бути

     // відображений. Дорівнює NULL, якщо використовується

     // символ за  замовчуванням.

LPBOOL lpUsedDefaultChar // Покажчик на прапорець, який вказує на

     // те, чи використовувався символ за замовчуванням у

     // попередньому параметрі. Може бути NULL.

);

Функція повертає кількість символів в рядку, який є результатом.

 










Последнее изменение этой страницы: 2018-05-29; просмотров: 175.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...