Главная страница
Навигация по странице:

  • ФОРМУЛИРОВКА ЗАДАНИЯ

  • ПРИНЦИП ПЕРЕКОДИРОВКИ

  • АБВГДЕЖЗИЙКЛМНОПРСТУФЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфцчшщъыьэюя

  • КОИ8−> cp 1251: cp 1251 = sub [КОИ8] cp 1251−>КОИ-8: КОИ8=${ sub [ cp 1251]}

  • Выполнение и контроль перекодировки ср1251 в КОИ-8

  • Семинар кодирование информации общие сведения


    Скачать 63.47 Kb.
    НазваниеСеминар кодирование информации общие сведения
    Дата06.11.2019
    Размер63.47 Kb.
    Формат файлаdocx
    Имя файлаSeminary_3_4_2019 (1).docx
    ТипСеминар
    #93844
    страница4 из 6
    1   2   3   4   5   6

    4.2. Практическое занятие по перекодировке текста


    ФОРМУЛИРОВКА ЗАДАНИЯ

    Разработать программу для перекодировки текстовых файлов, содержащих буквы алфавита кириллицы в кодовых наборах ср1251 и КОИ-8. Имена файлов исходного текста в кодировке КОИ-8 (ср1251) и результата его перекодировки в кодовый набор ср1251 (КОИ-8) должны передаваться программе через аргументы командной строки ее вызова. В программе должен быть предусмотрен анализ возможности доступ к исходному и результирующему файлам в соответствующих режимах обработки с диагностикой ошибочных ситуаций.
    ПРИНЦИП ПЕРЕКОДИРОВКИ
    Кодовые наборы ср1251 и КОИ-8 являются расширением кода ASCII для строчных и заглавных букв алфавита кириллицы. Они кодируются натуральными числами из 8 бит в диапазоне от 0300 (192, С0) до 0377 (255, FF). Этот диапазон делится на 2 равные части для строчных и заглавных букв. При этом коды любой строчной и заглавной буквы отличаются на 040 (32, 20), а разность кодов соседних букв равна 1. В кодовом наборе ср1251 заглавные и строчные буквы перечислены в алфавитном порядке, сначала заглавные, потом строчные:
    АБВГДЕЖЗИЙКЛМНОПРСТУФЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфцчшщъыьэюя
    В кодовом наборе КОИ-8 порядок перечисления букв отличен от алфавитного. При этом сначала перечислены строчные буквы, потом заглавные:
    юабцдефгхийклмнопярстужвьызшэщчъюабцдефгхийклмнопярстужвьызшэщъ
    Формальную схему перекодировки задает комбинаторная подстановка порядковых номеров букв (без учета их регистра) в кодовых наборах ср1251 и КОИ-8, которая номеру каждой буквы в исходной кодировке ставит в соответствие ее номер в результирующей кодировке. В программной реализации эта подстановка задается одномерным массивом sub номеров букв в результирующей кодировке, которые индексированы по порядку их номеров в исходной кодировке. В зависимости от направления перекодировки подстановку номеров букв можно записать следующим образом, используя синтаксис языков программирования C и BASH:

    КОИ8−>cp1251: cp1251 = sub[КОИ8]

    cp1251−>КОИ-8: КОИ8=${sub[cp1251]}

    В любом случае таблицу перекодировки tab образует конкатенация 2-х дубликатов массива sub номеров букв, где значения элементов увеличены на 0340 и 0300 для преобразования номеров букв результирующей кодировки в их коды, которые индексируются порядковыми номерами этих букв в исходной кодировке уже с учетом регистра букв. Учитывая, что номер заглавной или строчной буквы в любой исходной кодировке равен ее коду минус 0300, такой формат таблицы перекодировки tab обеспечивает преобразование кодов букв, независимо от направления перекодировки и регистра букв.
    Редактирование программы перекодировки ср1251 в КОИ-8

    В графическом окне текстового редактора xedit с кириллическим шрифтом ср1251 подготовить исходный текст программы на командном языке BASH для перекодировки файлов из кодового набора ср1251 в кодовый набор КОИ-8. Исходный текст этой программы с обязательными комментариями на русском языке необходимо сохранить в файле rnn.sh (где литеры nn обозначают номер варианта задания).
    #!/bin/bash

    # Программа перекодировки текста ср1251 в КОИ-8
    function winkoi # Функция построения таблицы перекодировки

    {

    # Подстановка номеров букв koi8 (в системе 8) koi8=${num[cp1251]}

    num=( 01 02 27 07 04 05 26 32 11 12 13 14 15 16 17 20 \

    22 23 24 25 06 10 03 36 33 35 37 31 30 34 00 21 )

    # Конкатенация кодов для строчных и заглавных букв в koi8

    for i in ${num[*]} ; do # перечисление номеров букв

    low=$low"\3$i" # склеить lower koi octal code set

    up=$up"\3`expr $i + 40`" # склеить upper koi octal code set

    done

    echo $up$low # total koi octal code set

    return # возврат из функции winkoi

    } # function winkoi
    # Диагностика аргументов командной строки

    if test $# -lt 2 # Контроль числа аргументов

    then echo "Usage: `basename $0` input.win output.koi" ; exit −7

    fi

    if ! test -f $1 # Проверка существования входного файла

    then echo "$1: No such regular file" >&2 ; exit 2 # ENOENT

    fi

    if ! test -r $1 # Контроль доступа по чтению для входного файла

    then echo "$1: Permission denied to read" >&2 ; exit 13 # EACCES

    fi

    # Контроль маршрутного имени для выходного файла

    curdir=`pwd` # маршрутное имя текущего каталога (if basename only)

    outdir=`expr $2 : '\(.*/\)' \| $curdir` # маршрутное имя каталога

    if [ ! -w $outdir -a ! -e $2 ] # контроль каталога по (пере)записи

    then echo "$outdir: Permission denied to write" >&2 ; exit -13

    fi

    if test -d $2 # Проверка, что выходной файл не каталог

    then echo "$2: Is directory" >&2 ; exit 21 # EISDIR

    fi

    if [ -e $2 -a ! -w $2 ] # Контроль перезаписи выходного файла

    then echo $2: Permission denied to rewrite ; exit 13 # EACCES

    fi

    # Транслитерация кодов cp1251 в koi8

    cat $1 | tr "\300-\337\340-\377" `winkoi` > $2

    exit 0 # Нормальное завершение программы

    Выполнение и контроль перекодировки ср1251 в КОИ-8

    Для интерпретации программы rnn.sh командным процессором BASH нужно ввести, следующую командную строку в графическом окне эмулятора терминала xterm:

    $ bash rnn.sh rnn.sh rnn.koi
    Результатом выполнения этой команды будет создание или перезапись файла rnn.koi, который содержит исходный текст программы на языке BASH с комментариями в кодировке КОИ-8. Результат этой перекодировки следует проверить визуально в графическом окне текстового редактора xedit с кириллическим шрифтом КОИ-8.


      1. 1   2   3   4   5   6


    написать администратору сайта