А. Ю. Каргашина и А. С. Миркотан под редакцией > Ю. М. Баяковского

Вид материалаКнига

Содержание


Открытие файла
Запись в файл
I несколько иной. Для того чтобы подготовить этот редактор к помещению строк текста в буфер, команду I
DIR, и вы получите справочник своих файлов. Можно убедиться, что TEST.TXT
U при работе с ошибками. Что произойдет, если вы нажмете Z
Редактирование файла
I (или ее эквивалент в вашем редакторе) для вставки текста по месту расположения указателя, преобразуйте TEST.TXT
EX? 4. Каково, по-вашему, назначение «вспомогательного» файла TEST.BAK
K удаляет всю строку текста. В команде K
Команды контекстного поиска
Страничная организация
L. Если нужно перейти на новую страницу в TECO, в текстовой строке, вставляемой с помощью команды I
Вспомогательные буферы
Вторая страница
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   27

1.2. Редактор


Как указывалось в §1.1, редактор нужен для того, чтобы помочь при формировании и хранении файлов. Часть ваших файлов будет представлять собой последовательности машинных команд, т.е. программы. Другие могут быть наборами данных, предназначенных для обработки с помощью программ.

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

Системы разделения времени. Монитор откроет вам доступ к редактору. В системах разделения времени, однако, монитор сначала проверит, имеете ли вы на это право. Поэтому в начале каждого сеанса связи с ЭВМ или задания нужно инициировать процедуру проверки, обратившись к монитору с помощью команды

LOGIN

В некоторых системах ей соответствует команда HELLO. Монитор не отреагирует на введенные литеры до тех пор, пока вы не нажмете клавишу возврата каретки CARRIAGE RETURN. Это удобно, так как позволяет вовремя выявить все опечатки в тексте. Ошибки можно исправить, если нажать клавишу RUBOUT (иногда она называется DELETE) и затем перепечатать текст. В некоторых системах вместо этого можно использовать клавишу BACKSPACE. Если вы сделаете много ошибок, то, видимо, проще стереть всю строку, которую вы печатаете, и начать сначала. Для этого надо нажать U.

В ответ на LOGIN монитор сначала запросит ваш шифр (опознавательный номер), затем пароль. Получив удовлетворительный ответ, он объявит о готовности принять ваши команды, напечатав соответствующее сообщение. В ряде систем это будет текст: READY (готов), в других — просто одна литера, например . (точка) или @. Появление такого сообщения говорит о том, что вы находитесь в режиме команд монитора. Помните, что в большинстве систем в этот режим всегда можно вернуться, дважды нажав C.

В большинстве систем разделения времени задание будет продолжаться, и расходная статья вашего счета будет расти до тех пор, пока вы каким-то образом не сообщите монитору о желании завершить задание. Для этого надо ввести команду, а не просто выключить терминал и уйти. Обычно это команда BYE. В некоторых системах вы получите запрос CONFIRM (подтвердите), на который нужно ответить YES, затем CARRIAGE RETURN.


УПРАЖНЕНИЕ. Попрактикуйтесь в использовании процедуры образования и завершения задания, пока не узнаете ее как следует.


Открытие файла. Чтобы записать файл в режиме команд монитора, нужно монитору дать команду о запуске системной программы редактора. В некоторых системах существует несколько программ-редакторов. Как правило, командой монитора о запуске системной программы является RUN; в отдельных системах используется команда R. Напечатайте эту команду, затем пробел и имя программы редактора. Например, чтобы вызвать редактор EDIT, нужно напечатать

RUN EDIT

затем возврат каретки CARRIAGE RETURN (эту клавишу мы будем обозначать символом ). В некоторых системах при использовании команды RUN имени системной программы должен предшествовать знак доллара $. В этом случае нужно ввести

RUN $EDIT

В ответ на это редактор сообщит о готовности принять команды, в которых указано, с какими файлами предстоит иметь дело; сообщение может быть в виде одного символа, например #. Поскольку мы хотим образовать новый файл, то должны выбрать для него имя. Длина имени файла может быть до шести литер. Первая литера должна быть буквой, остальные — либо буквами, либо цифрами. У нас есть все основания назвать свой файл TEST. Имя файла заканчивается расширением, состоящим из четырех литер, первая из которых точка. Расширения имен файлов служат для сообщения пользователям и системным программистам полезной информации о типе файла. Например, если бы наш файл представлял собой (макро) программу на языке ассемблера, то мы могли бы назвать его TEST.MAC. Мы же хотим записать файл, содержащий всего лишь простой текст, а для этого не предусмотрено никакого специального расширения. Однако совсем не указывать расширение тоже плохо, поскольку в ряде систем предполагается, что файл без расширения написан на каком-то выбранном администратором системы языке. Например, если администратор предпочитает язык Бейсик, то нашей программе TEST автоматически будет дано расширение по умолчанию TEST.BAS. Чтобы избежать такой путаницы, подберем подходящее мнемоническое расширение и назовем наш файл TEST.TXT.

Мы хотим сообщить редактору, что собираемся послать написанное в файл TEST.TXT, т.е. TEST.TXT должен быть открыт для вывода. Поэтому в ответ на сообщение редактора (в данном случае #) о готовности принять такую информацию мы печатаем

TEST.TXT

Затем EDIT, зная, что вы хотите делать с напечатанным вами текстом, объявит о готовности принять команды редактирования текста, напечатав *. Не все редакторы отделяют таким образом стадии приема команд открытия файла от стадии приема команд редактирования текста. Например, редактор TECO выдает * в качестве приглашения для любого типа команд. Поэтому недостаточно напечатать только имя файла; сначала нужно сообщить TECO с помощью команды EW, что вы собираетесь открыть файл для вывода

EWTEST.TXT

Заметим, что в TECO команды вводят при нажатии два раза подряд клавиш ESCAPE (в некоторых терминалах она называется ALTMODE), а не при помощи CARRIAGE RETURN. Когда вы нажмете ESCAPE, монитор напечатает на терминале символ $. Редактор TECO есть в целом ряде систем PDP-11; это очень элегантный и мощный редактор, и мы вам его настоятельно рекомендуем.


Запись в файл. Если редактор готов принять команды редактирования текста, то он отводит рабочую область для того текста, с которым вы хотите работать. Эта рабочая область называется буфером и находится в легко доступном месте хранения информации, т.е. в памяти машины. Память (также известная под названием запоминающее устройство) доступна как для программ пользователей, так и для системных программ. Информация, хранящаяся в памяти, не остается там по окончании сеанса связи с ЭВМ; для более длительного хранения ее необходимо записать в файлы на дисках или лентах.

В начале сеанса редактирования буфер пуст. Первое, что надо сделать, это поместить туда нужный нам текст. В некоторых редакторах все, что вы на этом этапе напечатаете до команды конца текста, воспринимается как текст для вставки. Однако в более общем случае сначала необходимо ввести специальную команду, например I. Вы должны четко представлять себе, как правильно использовать эту команду (синтаксис команды). Например, в TECO синтаксис команды I очень прост: напечатав I, вы затем просто печатаете весь текст, который хотите вставить, после этого нажимаете ESCAPE два раза подряд. Сеанс может выглядеть, скажем, так:

*ITHE QUICK

BROWN FOX

$$

Символ * напечатал редактор TECO; все остальное было напечатано пользователем. Вспомните, что $ появляется на терминале после нажатия клавиши ESCAPE. Заметим, что редактор воспринимает CARRIAGE RETURN как часть текста. В результате буфер содержит следующий текст:

THE QUICKBROWN FOX

Здесь мы использовали символ , чтобы показать, что в буфере есть возврат каретки.

В редакторе EDIT синтаксис команды I несколько иной. Для того чтобы подготовить этот редактор к помещению строк текста в буфер, команду I нужно предварительно ввести:

I

После этого EDIT будет воспринимать все, что вы введете с клавиатуры (включая возврат каретки, когда вы захотите перейти на новую строку), как текст для вставки, пока вы не нажмете клавишу LINE FEED, обозначаемую здесь символом ↓. Таким образом, в редакторе EDIT ваш сеанс может выглядеть так:

*I

THE QUICK

BROWN FOX

После того как редактор выдал приглашение *, вы набираете на клавиатуре

ITHE QUICKBROWN FOX↓

Все это поступает в буфер, кроме ↓, что просто означает конец, вводимого текста. Редактор выдаст новое приглашение *, показывая, что он готов принять следующие команды.

Теперь буфер содержит все, что мы собирались записать, и нам надо передать его содержимое в выходной файл. Содержимое буфера пересылает в выходной файл команда EX. Кроме того, она закрывает выходной файл и отыскивает для него место на диске в зоне данного пользователя. В редакторе TECO EX помимо этого возвращает вас в режим команд монитора. В редакторе EDIT в результате ввода EX появляется приглашение # на ввод новых команд открытия файла. Чтобы передать управление от этого редактора к монитору, нужно нажать Z (вспомним, что это CONTROL-Z); так устроено большинство системных программ фирмы DEC.

Снова оказавшись в режиме команд монитора, введите DIR, и вы получите справочник своих файлов. Можно убедиться, что TEST.TXT существует! Для того чтобы проверить содержимое файла, обратитесь к монитору с помощью команды

TYPE TEST.TXT

и вы все увидите.


УПРАЖНЕНИЕ. Освойте запись файлов, содержащих различные тексты. Определите для себя результат действия RUBOUT, BACKSPACE и U при работе с ошибками. Что произойдет, если вы нажмете Z без предварительного ввода команды EX? Каков эффект от использования Z? Что произойдет, если имя, которое вы даете выходному файлу, принадлежит уже существующему файлу?


Редактирование файла. Предположим, вы хотите исправить то, что уже записали в свой файл TEST.TXT. Сначала повторите описанную выше процедуру до того места, когда редактор готов принять команды открытия файла. Работа с текстом может происходить только в буфере, поэтому мы должны уметь пересылать данные из нашего файла в буфер; т.е. TEST.TXT должен быть открыт для ввода. Исправленные данные поступают обратно в TEST.TXT и образуют обновленную версию этого файла, поэтому TEST.TXT должен быть открыт и для вывода. В EDIT в ответ на приглашение редактора # для этого нужно набрать

TEST.TXT
и ввести эту команду с помощью . Здесь TEST.TXT сначала упомянут как выходной файл, а после литеры <, которая требуется по синтаксису данной команды,— как входной файл. Поэтому, если вы хотите, чтобы новая версия вашего файла имела новое имя, скажем TEST1.TXT, то в ответ на приглашение # введите другую команду:

TEST1.TXT
Какой бы редактор вы ни использовали, важно представлять себе, что процесс редактирования состоит из трех этапов. Текст поступает из входного файла в буфер редактирования, обрабатывается в буфере и посылается из буфера редактирования в выходной файл. Очень часто один и тот же файл становится как входным, так и выходным: для такого случая, как правило, предусмотрены специальные команды. Например, в ряде систем с редактором EDIT можно ввести такую команду в режиме команд монитора:

EDIT TEST.TXT

В результате мы не только открываем TEST.TXT для ввода и вывода, но и считываем текст из данного файла в буфер. Кроме того, после завершения сеанса редактирования команда EX снова передаст управление непосредственно монитору.

Однако если никакая особая команда редактирования не была использована, то наш файл открыт для ввода и вывода, а буфер пуст. Мы лишь образовали двунаправленный канал для взаимодействия между нашим файлом и памятью, а само взаимодействие еще не осуществилось. Нужно ввести команду считывания текста в буфер. В редакторе EDIT, например, это команда R.

Считав текст в буфер, мы можем проверить, то ли это, что нам требуется, с помощью команды распечатки текста на терминале. В редакторе EDIT это команда L. После ввода команды L редактор напечатает

THE QUICK

т.е. мы получим первую строку своего файла. Заметим, что символ , который редактор воспринимает как ограничитель строки, рассматривается как часть этой строки. Чтобы получить распечатку двух строк нашего файла, нужна команда 2L и т.д. Поскольку наш файл содержит только две строки текста, то 100L приведет к тому же результату, что и 2L.

Команда L печатает строку текста, начиная с редакторского индикатора позиции, или указателя. Поскольку исправления текста могут производиться только по месту расположения указателя, важно научиться по желанию передвигать его. В начале сеанса редактирования после считывания текста редактор помещает указатель в начало буфера. Введите команду перемещения указателя на одну строку; в редакторе EDIT это команда A. Затем команда L или 2L выдаст

BROWN FOX

С помощью команды — L можно получить строку, непосредственно предшествующую указателю. Заметьте, что эта команда не передвигает указатель; для перемещения указателя нужна специальная команда — в данном случае A. В этих командах можно использовать любое целое число — положительное или отрицательное.


УПРАЖНЕНИЯ. 1. Что произойдет в вашем редакторе, если ввести команду перемещения указателя на число строк, превосходящее число строк текста в буфере?

2. Замените TEST.TXT на файл с тем же именем, содержащий текст5

THE QUICK BROWN FOX JUMPS

OVER THE LAZY DOG

3. Используя команду I (или ее эквивалент в вашем редакторе) для вставки текста по месту расположения указателя, преобразуйте TEST.TXT к виду

THE QUICK BROWN FOX JUMPS

AGAIN AND AGAIN

OVER THE LAZY DOG

Можно ли так же просто использовать команду EX?

4. Каково, по-вашему, назначение «вспомогательного» файла TEST.BAK, который вы обнаружите в своем справочнике?

5. Что произойдет, если вы нажмете C перед тем, как закрыть файл с помощью команды EX? Проверьте еще раз содержимое вашего справочника.

6. В редакторе EDIT команда K удаляет всю строку текста. В команде K можно использовать любое целое число — положительное или отрицательное. Преобразуйте свой файл еще раз:

THE QUICK BROWN FOX JUMPS

OVER THE LAZY DOG

AGAIN AND AGAIN

Проверьте содержимое TEST.TXT и TEST.BAK.

7. Снова исправьте свой файл, чтобы там можно было прочитать

THE QUICK BROWN FOX JUMPS

AGAIN AND AGAIN OVER THE LAZY DOG


Команды контекстного поиска. Теперь мы знаем, как формировать строки текста. Имея в своем распоряжении набор команд, мы можем по желанию производить любые изменения в файле, удаляя строки и вставляя новый вариант. Обидно, однако, идти на большие затраты ради незначительных исправлений. Пусть, например, мы хотим добавить точку после DOG в версии файла TEST.TXT в упр. 2. Вставлять точку мы умеем, поскольку можем передвинуть указатель на нужное место. Заметьте, что указатель редактора всегда находится либо между двумя литерами, либо перед первым символом буфера, либо после последнего. Считается, что он никогда не указывает на саму литеру. Мы хотим вставить точку после буквы G в слове DOG и перед символом , который идет за этим словом. Туда мы и должны переместить указатель.

Как правило, в редакторах есть команда поиска требуемого текста, которая помещает указатель сразу за этим текстом. В редакторе EDIT это команда G. Синтаксис команды G такой же, что и у команды I. Команда G ищет первое вхождение данного текста, начиная с позиции, в которой находится указатель к моменту ввода команды. В нашем примере при поиске символа не возникает неоднозначности. Поэтому, когда редактор готов принять команды редактирования текста, мы печатаем

GG↓

где с помощью  происходит ввод команды G, символ G обозначает разыскиваемый текст, а ↓ (LINE FEED) — ограничитель текста.

Чтобы определить положение указателя, мы можем использовать уже известную нам команду распечатки текста, в данном случае L. Команда L выдаст из буфера текст, расположенный от указателя и до ближайшего символа  включительно. (Что делает команда — L? 0L?) Отметим, что K — команда удаления строки — сотрет текст, напечатанный той командой L, перед которой стоит такое же число (положительное, или отрицательное, или нуль). Проверьте, как работает команда перехода на следующую строку (это команда A), если указатель находится не в начале строки.

Вам следует попрактиковаться в использовании команды поиска, в данном случае G, для перемещения указателя по всем направлениям. Для поиска второго вхождения указанного текста можно использовать команду 2G и т.д. (Что произойдет, если при вводе команды G данного текста нет в буфере или он есть, но находится до указателя? Где будет указатель после безрезультатного поиска? Где находится указатель после того, как вслед за словом DOG будет поставлена точка?) Как правило, существует команда возврата указателя в начало буфера; в редакторе EDIT это B.

Пусть мы хотим заменить JUMPS на JUMPED. В некоторых редакторах есть специальная команда, в которой сначала нужно указать существующий текст, а потом тот, который требуется. В редакторе TECO эта операция даже объединена с поиском: если указатель находится раньше слова JUMPS, то нам достаточно напечатать

FSJUMPS$JUMPED$$

При этом TECO по команде FS ищет текст, стоящий перед первой литерой $ (ESCAPE), и заменяет его на новый текст, который идет дальше до завершающих литер.

Большинство редакторов, однако, не столь удобно. Обычная процедура состоит в поиске JUMP, удалении S и вставке ED. В EDIT командой удаления следующей за указателем литеры является D; если перед ней стоит положительное или отрицательное число, то можно удалить несколько литер до или после указателя. При использовании этой команды надо помнить, что пробелы и знаки пунктуации — это тоже литеры. Иногда требуется переместить указатель на несколько литер вперед или назад. В редакторе EDIT это делается с помощью команды J, перед которой ставится соответствующее положительное или отрицательное число.


УПРАЖНЕНИЯ. 1. Сформируйте файл, содержащий текст6

ALL THAT GLISTERS IS NOT GOLD

SHAKESPEARE

1596

и вернитесь в режим команд монитора.

2. Исправьте файл так, чтобы он содержал

ALL IS NOT GOLD THAT GLISTERS

CERVANTES

1615

и вернитесь в режим команд монитора.

3. Снова исправьте файл, чтобы он стал таким:

ALL IS NOT GOLD THAT GLISTENETH

MIDDLETON

1617

Пусть мы хотим преобразовать первоначальную версию TEST.TXT так, чтобы весь текст располагался в одну строку. Нужно найти QUICK, удалить символ , который теперь после успешного поиска стоит за указателем, и вставить пробел. Удаление  не вызовет никаких затруднений, поскольку нам известно, что

нажатие клавиши CARRIAGE RETURN приводит к возврату каретки и переводу строки.

Возврат каретки заключается в том, что курсор терминала возвращается в начало той же строки; если (что маловероятно) только это и требуется, то достаточно нажать M. Перевод строки переводит курсор терминала на одну строку вниз; для этого надо нажать LINE FEED, или, что одно и то же, J.


УПРАЖНЕНИЯ. 1. Проверьте самостоятельно, как работают J и M по отдельности, когда печатающая головка или курсор терминала находится не в начале строки.

2. Убедитесь, что в первоначальной версии TEST.TXT между словами QUICK и BROWN на самом деле находятся две литеры. Посмотрите, что произойдет, если вы удалите одну из них.


Страничная организация. Объем текста, считываемый командой R редактора EDIT из входного файла в буфер, называется страницей. В данном случае это слово имеет скорее технический, нежели обычный типографский смысл. Наш файл TEST.TXT был настолько мал, что нам не надо было беспокоиться насчет страниц. Однако большие файлы должны быть разделены на страницы по двум причинам: во-первых, не во всех редакторах приветствуются попытки считать в буфер редактирования больше, чем он может вместить; во-вторых, с помощью странично-ориентированных команд работать в большом файле гораздо проще, если он имеет страничную организацию. Как правило, предполагается, что буфер редактирования достаточно велик, чтобы вместить содержимое экрана дисплея или текст, напечатанный через два интервала на странице обычного формата.

В редакторах фирмы DEC наиболее распространенным указателем конца страницы является символ FORM FEED или эквивалентный ему L. Если нужно перейти на новую страницу в TECO, в текстовой строке, вставляемой с помощью команды I, просто печатается L. Однако в редакторе EDIT сначала надо завершить символом ↓ вставляемый текст, затем ввести команду F (т.е. нажать F) для образования в тексте символа FORM FEED, после этого перейти к следующей команде I.

После того как в странице, находящейся к настоящему моменту в буфере, завершился весь процесс редактирования, ее можно отправить в выходной файл. В EDIT содержимое буфера посылает в выходной файл команда N; кроме того, она очищает буфер и считывает следующую страницу текста в буфер, если во входном файле еще есть текст. В некоторых редакторах для того, чтобы выполнить эти операции, может потребоваться несколько команд.

В ряде редакторов есть команды поиска, которые, не ограничиваясь содержимым буфера, проверяют весь входной файл. При использовании такой команды важно представлять себе, что делает редактор со страницами входного файла, в которых нет искомого текста. В редакторе EDIT команда H последовательно считывает страницы входного файла в буфер, просматривает их и отправляет в выходной файл, если требуемый текст еще не обнаружен. Команда P, однако, не выводит, а просто стирает содержимое буфера перед тем, как считать туда следующую страницу. Удобно иметь в своем распоряжении обе команды, но очень раздражает, когда по ошибке используется не то.


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

Предположим, что создается файл, в котором некоторый блок текста встречается более одного раза. Сначала нужно ввести текст в буфер редактирования с помощью команды I. Затем используется специальная команда копирования этого текста в особый буфер. Как правило, синтаксис этой команды тот же, что и синтаксис команды выдачи текста на терминал. Они действительно очень похожи: одна записывает текст в область памяти, другая — на терминал. В редакторе EDIT есть только один дополнительный буфер, называемый буфером сохранения. Команда сохранения строк текста S используется в этом редакторе так же, как и L, с той разницей, что в S при указании нескольких строк текста допускаются лишь положительные числа. Помните, что текст все еще находится в буфере редактирования и должен быть удален оттуда, если он там больше не нужен. Позднее, чтобы содержимое буфера сохранения вставить в буфер редактирования непосредственно перед указателем, используется еще одна команда; в редакторе EDIT это U. Содержимое буфера сохранения не портится, поэтому этот же текст может быть вставлен еще в каком-нибудь месте.


УПРАЖНЕНИЯ. 1. Образуйте файл, состоящий из трех страниц, в которых последовательно располагаются слова ВТОРАЯ СТРАНИЦА, ТРЕТЬЯ СТРАНИЦА и ПЕРВАЯ СТРАНИЦА.

2. Не используя команды вставки, исправьте ваш файл так, чтобы текст на каждой странице соответствовал порядку страниц в файле.