logo search
AOM / Мельник А

6.8. Операції обробки символів та рядків символів

Є два типи операцій над символами - аналіз, тобто визначення значення символу, і перетворення, тобто зміна значення кодів символів. До основних операцій над символа­ми належать наступні:

• Ідентифікація. Ця операція дозволяє визначити відповідність (невідповідність) значення коду аналізованого символу X коду заданого символу С. Ідентифікація символу X виконується шляхом перевірки збігу коду символу X з кодом символу С, розміщених в основній пам'яті або регістрах, і вказаних відповідними адресами. Результатом операції

233

є 1, якщо коди символів співпадають, і 0, якщо не співпадають. Операція ідентифікації виконується як операція порівняння двійкових кодів на збіжність, описана в п. 6.4.1.

Рядок представляє послідовність символів, що зберігаються в пам'яті комп'ютера та створюють певну семантичну одиницю оброблюваної інформації. Рядки символів мо­жуть мати фіксовану, змінну або довільну довжину. Одиницею обробки інформації ряд­ків символів є не двійковий розряд, а символ. Тому і всі операції над рядками символів розглядаються як операції над впорядкованими послідовностями символів.

Аналогічно до операцій над символами, операції над рядками символів можна розді­лити на два види: аналізу, які не змінюють вмісту оброблюваних рядків, і перетворення, за допомогою яких змінюється семантичний або синтаксичний вміст рядків.

До операцій аналізу належать операції пошуку символу та перевірка за маскою. Операція пошуку символу дозволяє визначити наявність і місцезнаходження певного (заданого) символу в рядку. Операція завершується при виявленні першого шуканого символу в рядку, або закінченням посимвольної перевірки цього рядка, якщо шуканий символ відсутній в цьому рядку. Положення виявленого символу визначається порядко­вим номером символу в рядку або його адресою (при посимвольній системі адресації). Пошук виконується шляхом посимвольного порівняння кодів символів рядка з кодом заданого символу на виконання заданого відношення (=, >, <). Зазвичай передбачаються окремі операції пошуку для кожного з можливих відношень. Коди символів інтерпрету­ються як двійкові числа без знаків. Залежно від прийнятої системи кодування можливі й інші закони визначення ваг двійкових розрядів кодів символів. Результат виконан­ня операції відображається станом спеціального індикатора і вмістом регістра адреси пам'яті, відповідним адресі останнього звернення до чергового досліджуваного симво-

234

лу. Кінець досліджуваного рядка визначається після закінчення обробки певного числа символів (при фіксованій довжині слова), після обробки вказаної в команді кількості символів (при змінній посимвольній адресації), або при виявленні ознаки кінця рядка (для слів довільної довжини). Очевидно, що ситуація відсутності шуканого символу в рядку утворює один із станів коду умов або індикаторного регістра. Перевірка за маскою аналогічна операції пошуку символу, тільки виконується пошук не одного символу, а їх послідовності.

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

За допомогою компонування (запису за маскою) можна виконати об'єднання вмісту двох рядків Xі Yза кодом символу маски М шляхом запису символів одного рядка (X)в місце розташування символів іншого рядка (Y)в тих позиціях, які вказані кодом маски. Інші символи першого рядка, другого рядка і код маски не змінюються. Компонування використовується для формування нового рядка з послідовностей символів двох почат­кових рядків зміною значення деяких символів рядка або зміною послідовності символів в рядку. В операції беруть участь три операнди: змінний рядок Y,рядок даних Xі символ (може бути рядок) маски М, послідовність двійкових розрядів якої відповідає символам перших двох операндів зліва направо (або навпаки). Перші два операнди зазвичай за­даються 'їх адресами, а код маски вказується безпосередньо в команді. За цих умов змі­ні підлягають символи Y,яким відповідає одиничне значення двійкового розряду коду маски М.

Редагування дозволяє видозмінити заданий рядок F(звичайно цей текст представ­ляє число, що зберігається для економії пам'яті в найбільш компактному вигляді) згідно з певним шаблоном S.Необхідність в такій зміні часто виникає при виведенні наборів різних змінних даних на друк згідно з формою 'їх відображення, що вимагає, наприклад, проставлення спеціальних знаків, записів, пояснень і т. п. Необхідні редакторські дії за­даються відповідними керуючими символами, що включаються в необхідній послідов­ності в рядок-шаблон, відповідно до якого і виконується операція редагування. Достат­ню гнучкість редагування забезпечують наступні операції над керуючими символами в рядку-шаблоні:

* заміна символів-заповнювачів в тексті шаблону символами рядка даних у порядку їх проходження (зазвичай зліва направо);

Редагування цифрового рядка Fздійснюється посимвольно зліва направо згідно з вмістом послідовності керуючих символів рядка шаблону S.В результаті виконання one-

235

рації виходить послідовність символів рядка шаблону S,в якому символи-заповнювачі (а також символи керування видаленням незначущих нулів і початку значущості, якщо вони є) замінені конкретними значеннями цифр редагованого числового рядка. Саме ре­даговане число при цьому не змінюється. Шаблон і редаговане число задаються їх адре­сами, а операція закінчується при виявленні символу-покажчика кінця шаблону при по­слідовному його огляді під час виконання операції. Зазвичай шаблон створюється для редагування послідовності одного числа, проте це не є обов'язковим, оскільки виконан­ня операції керується повністю контекстом шаблону і єдиною додатковою вимогою для редагування декількох чисел за одним шаблоном є послідовне розташування цих чисел в пам'яті в порядку, відповідному послідовності 'їх включення в контекст відредагованого рядка згідно з заданим форматом шаблону. Природно, при цьому необхідне багатократ­не використання символів керування видаленням незначущих нулів і вказівки місця початку значущості. Приймається, що дія попереднього символу, задаючого видалення нулів, анулюється першим подальшим символом вказівки місця початку значущості і будь-яким символом тексту шаблону, окрім символів десяткової крапки (або коми) та символів-заповнювачів. Знак редагованого числа розглядається як чергова цифра цього числа.

Перекодування призначене для виконання переходу від однієї системи кодування символів до іншої, що довільно задається. Передбачається, що належний перекодуванню рядок зберігається в послідовних комірках пам'яті, починаючи з деякої адреси, і задана таблиця перекодування, що зберігається в пам'яті, також починається з деякої адреси. Таблиця перекодування містить перелік належних перекодуванню символів в новій сис­темі кодування. Перекодування виконується заміною чергового символу одного рядка відповідним новим кодом цього символу з таблиці перекодування. Перекодування може супроводжуватися визначенням і відповідною індикацією деяких умов (наприклад, на­явність тільки цифрових і алфавітних, або ж тільки визначених символів в рядку, що перекодовується) і завершенням операції при виконанні або невиконанні певних умов. Таким чином, можуть формуватися декілька варіантів операцій перекодування.

Перетворення форматів байтів застосовується для економного зберігання цифро­вих даних в пам'яті та зручності представлення їх вмісту на зовнішніх документах, що підлягають сприйняттю людиною. Як відомо, для зберігання цифрових даних достат­ньо 4 двійкових розряди на десяткову цифру, тобто в байті, призначеному для зберіган­ня коду одного алфавітно-цифрового символу, можна розмістити коди двох десяткових цифр, або коди цифри і знаку, що удвічі скорочує об'єм пам'яті, необхідної для зберіган­ня цих даних. Проте при виводі на друк або інші зовнішні носії інформації необхідно привести коди всіх символів до єдиного формату, оскільки інакше неможлива правиль­на їх інтерпретація з обліком тільки кодів байтів.

Таким чином, при байтовій організації пам'яті для зберігання одиниць числової і символьної інформації застосовують два формати, які умовно називаються упакований - по дві десяткові цифри в байті і зоновий - одна десяткова цифра (або знак) в байті. В останньому випадку двійковий код цифри (або знаку) прийнято розміщувати в пра­вих чотирьох розрядах коду байта і називати цю його частину цифровою, а ліва частина байта при цьому містить спеціальний код зони, використовуваний як ознака цифрових даних, і називається зоновою частиною.

236

Для перетворення форматів представлення цифрових даних застосовують 4 операції: пакування - перехід від розширеного формату до стислого, розпаковування - зворотна операція пакуванню; пересилку цифр - перезапис цифрових частин байтів і пересилку зон - перезапис зонових частин байтів.