Обработка документов
Кодирование русского текста
Исторически сложилось так, что для представления печатных символов (кодирования текста) в первых ЭВМ отвели 7 бит. 27=128. Этого количества вполне хватало для кодирования всех строчных и прописных букв латинского алфавита, десяти цифр и различных знаков и скобок. Именно такой, 7-битной, является таблица символов ASCII (американский стандартный код для обмена информацией), подробную информацию о которой вы можете получить при помощи команды man ascii операционной системы Linux.
Когда возникла необходимость кодировать национальные алфавиты, то 128 символов стало недостаточно. Было решено перейти на кодирование с помощью 8 бит (т. е. одного байта). В результате количество символов, которые можно закодировать таким образом стало равно 28=256. При этом символы национальных алфавитов располагались во второй половине кодовой таблицы, т. е. содержали единицу в старшем разряде байта, отведенного для кодирования символа. Так появился стандарт ISO 8859, содержащий множество кодировок для наиболее распространенных языков.
Среди них была и одна из первых таблиц для кодировки русских букв - ISO 8859-5 (воспользуйтесь командой man iso_8859_1 для получения кодов русских букв в этой таблице).
Задачи передачи текстовой информации по сети вынудили разработать еще одну кодировку для русских букв, названную Koi8-R (код отображения информации 8-битный, русифицированный). Рассмотрим ситуацию, когда письмо, содержащее русский текст, отправлено по электронной почте. Случалось, что в процессе путешествия по сетям письмо обрабатывалось программой, которая работала с 7-битной кодировкой и обнуляла восьмой бит. В результате такого преобразования код символа уменьшался на 128, превращаясь в код символа латинского алфавита. Возникла необходимость повысить устойчивость передаваемой текстовой информации к обнулению 8 бита.
К счастью, значительное число букв кириллицы имеет фонетические аналоги в латинском алфавите. Например, Ф и F, Р и R. Есть несколько букв, совпадающих даже по начертанию. Расположив русские буквы в кодовой таблице таким образом, чтобы их код превышал код аналогичных латинских на число 128, добились того, что потеря 8-го бита превращала текст хотя и в состоящий из одной латиницы, но все равно понимаемый русскоязычным пользователем.
Так как из всех операционных систем, распространенных в то время, самыми удобными средствами работы с сетью обладали различные клоны операционной системы Unix, то эта кодировка стала фактическим стандартом в этих системах. Таковой она является и сейчас в ОС Linux. И именно эта кодировка чаще всего применяется для обмена почтой и новостями в Интернет.
Далее наступила эра персональных компьютеров и операционной системы MS DOS. Как выяснилось, кодировка Koi8-R для нее не подходила (так же, как и ISO 8859-5), в ее таблице некоторые русские буквы находились на тех местах, которые многие программы предполагали заполненными псевдографикой (горизонтальные и вертикальные черточки, уголки и т. д.). Поэтому была придумана еще одна кодировка кириллицы, в таблице которой русские буквы "обтекали" со всех сторон графические символы. Назвали эту кодировку альтернативной (alt), поскольку она была альтернативой официальному стандарту - кодировке ISO-8859-5. Неоспоримым достоинством этой кодировки является то, что русские буквы в ней расположены в алфавитном порядке.
После появления ОС Windows от фирмы Microsoft выяснилось, что альтернативная кодировка по некоторым причинам для нее не подходит. Снова передвинув русские буквы в таблице (появилась возможность - ведь псевдографика в Windows не требуется), получили кодировку Windows 1251 (Win-1251).
Но компьютерные технологии постоянно совершенствуются и в настоящее время все большее число программ начинает поддерживать стандарт Unicode, который позволяет кодировать практически все языки и диалекты жителей Земли.
Итак, в различных ОС предпочтение отдается разным кодировкам. Для того чтобы стало возможным чтение и редактирования текста, набранного в другой кодировке, используются программы перекодирования русского текста. Некоторые текстовые редакторы содержат встроенные перекодировщики, позволяющие читать текст в различных кодировках (Word и др.). Мы для перекодировки файлов будем использовать ряд утилит в ОС Linux, назначение которых ясно из названия: alt2koi, win2koi, koi2win, alt2win, win2alt, koi2alt (откуда, куда, цифра 2 (two) схожа по звучанию с предлогом to, указывающим направление). Эти команды имеют одинаковый синтаксис: команда <входной_файл >выходной_файл.
Пример
Перекодируем текст, набранный в редакторе Edit в среде MS DOS, в кодировку Koi8-R. Для этого выполним команду
alt2koi <file1.txt >filenew
Так как в MS DOS и Linux по разному кодируется перевод строки, рекомендуется выполнить еще команду "fromdos":
fromdos <filenew>file2.txt
Команда с обратным действием называется "todos" и имеет такой же синтаксис.
Пример
Отсортируем файл List.txt, содержащий список фамилий и подготовленный в кодировке Koi8-R, в алфавитном порядке. Воспользуемся командой sort, которая сортирует текстовый файл по возрастанию или убыванию кодов символов. Если применить ее сразу, то, например, буква В окажется в конце списка, аналогично соответствующей ей букве латинского алфавита V. Вспомнив, что в альтернативной кодировке русские буквы расположены строго по алфавиту, выполним ряд операций: перекодируем текст в альтернативную кодировку, отсортируем его и снова вернем в кодировку Koi8-R. С использованием конвейера команд получаем
koi2alt <List.txt | sort | alt2koi >List_Sort.txt
В современных дистрибутивах ОС Linux решены многие проблемы, связанные с локализацией программного обеспечения. В частности утилита sort теперь учитывает особенности кодировки Koi8-R и для сортировки файла в алфавитном порядке достаточно выполнить команду
sort <List.txt >List_Sort.txt
Редакторы plain-текста
Простые и удобные в использовании редакторы неформатированного текста (plain-text) постоянно требуются программистам при написании текстов программ, создателям Web-документов, которых по ряду причин не устраивают Web-редакторы, людям, использующим TeX или LaTeX, и многим другим. Принципы создания, сохранения и редактирования документов в них очень схожи и не требуют от пользователя кропотливой работы по их освоению. Мы познакомимся с программой NotePad, входящей в состав MS Windows, а также с редакторами, входящими в состав среды KDE (Linux): KEdit, KWrite, McEdit. Затем мы рассмотрим программу Emacs, для которой создание plain-текста есть лишь малая часть ее потенциальных возможностей.
NotePad (Блокнот)
Редактор NotePad является одним из самых распространенных средств подготовки неформатированного текста в среде MS Windows. Окно редактора содержит строку меню, включающую три пункта: Файл, Правка и Поиск.
Меню Файл служит для работы с файлами. Оно позволяет создавать, сохранять и открывать существующий файл. Команды редактирования документа (копирование, вставка, удаление фрагмента текста) осуществляются при помощи меню Правка. Для поиска фрагмента текста используется меню Поиск.
NotePad допускает еще один способ вызова команд редактирования документа - контекстное меню. Для вызова контекстного меню нужно выделить некоторый элемент документа, а затем щелкнуть правой кнопкой мыши. Для закрытия контекстного меню без выбора команды достаточно щелкнуть по кнопке мыши, поместив ее курсор за пределами меню, или нажать клавишу Esc.
Для выделения частей текста и перемещения используются различные комбинации клавиш, представленные в таблице.
Shift+стрелка вправо | Выделение символа слева от курсора |
Shift+стрелка влево | Выделение символа справа от курсора |
Shift+стрелка вверх | Выделение предыдущей строки |
Shift+стрелка вниз | Выделение последующей строки |
Shift+Home | Выделение текста от начала строки до курсора |
Shift+End | Выделение текста от курсора до конца строки |
PgUp/PgDn | Перемещение на страницу вверх/вниз |
Home/End | Перемещение в начало/конец строки |
Ctrl+стрелка вправо | Перемещение на слово вперед |
Ctrl+стрелка влево | Перемещение на слово назад |
Ctrl+Home | Перемещение в начало текста |
Ctrl+End | Перемещение в конец текста |
Для установки курсора в определенное место можно использовать мышь: надо передвинуть курсор и сделать щелчок левой кнопкой.
Перед выполнением команд редактирования фрагмента текста его нужно выделить, для чего можно использовать два способа: при помощи мыши, или с использованием комбинации клавиш. Для того чтобы выделить текст с помощью мыши, нужно установить курсор мыши в начало фрагмента текста, который нужно выделить, и переместить курсор при нажатой левой кнопке мыши до конца фрагмента. Фрагмент остается выделенным до тех пор, пока не будет выделен другой фрагмент.
Редактор NotePad использует в своей работе так называемый буфер обмена. В буфер обмена временно помещают фрагменты текста произвольной длины. Фрагмент с прежней позиции копируется или удаляется, при этом он автоматически помещается в буфер обмена и затем может быть вставлен в какое-либо место текста. Фрагмент сохраняется в буфере до тех пор, пока в него не будет внесен новый текст.
Задания
- Наберите фрагмент текста:
Yesterday, all my troubles seemed so far away, Now it looks as though they're here to stay, Oh i believe in yesterday.
Еще вчера мне казалось, что все мои беды далеки от меня, А сейчас они словно стеной обступили меня, Но я верю во вчерашний день.
- Скопируйте последний абзац три раза и сохраните файл под именем notepad.txt