добавления данных в конец файла).
В отличие от некоторых других операционных систем (таких как
р-система Калифорнийского университета в Сан-Диего), ДОС выделяет место на
дискете по одному кластеру, когда в этом есть необходимость, не заботясь о
том, чтобы все данные файла хранились в одной непрерывной области диска.
При разработке любой схемы распределения дискового пространства в любой
операционной системе приходится выбирать между свободным выделением
пространства по одному кластеру, в результате чего файл может оказаться
"размазанным" по всей дискете, и выделением места большими непрерывными
сегментами , что усложняет задачу управления пространством на дискете.
Операционная система ДОС использует более простой первый метод.
Если дискета пуста, то все доступное на ней место представляет собой
одну большую чистую область. Когда файлы копируются на такую дискету, они
оформляются в виде удобно размещенных непрерывных фрагментов дискового
пространства. Но впоследствии, если файлы будут удлиняться, то
дополнительное место будет выделяться в первых свободных кластерах,
которые могут находится в любом месте дискеты.
Когда файлы копируются на новую дискету и оставляются без изменения,
их размещение на дискете остается экономичным. Но если создаются или
удаляются какие-либо данные, то использование места на дискете становится
весьма запутанным.
Это наиболее вероятно происходит, когда программа создает
одновременно два файла. Если файлы увеличиваются параллельно, то их
расположение на дискете обязательно будет перемежающимся.
Изучение динамики распределения пространства на дискете может
оказаться довольно интересным и поучительным. Если у Вас есть моя утилита
Disklook, то можно изучать распределение пространства на Вашей дискете,
устанавливать расположение пространства всех файлов и проверять,
фрагментировано ли пространство на диске.
Итак, схема распределения пространства на дискете в ДОС довольно
хороша, она равномерно использует все пространство и не требует нашего
вмешательства. Однако, все эти преимущества достигаются ценою
"размазывания" файлов по дискете. Из-за этого может увеличиться время
доступа к файлу, поскольку магнитная головка чтения/записи должна
перемещаться по всей дискете для поиска нужных дорожек. Поскольку
обращения к дискете являются наиболее медленными операциями и основными
ограничивающими факторами производительности IBM/PC, такое размещение
файлов может породить проблемы, хотя обычно этого не случается.
По этой причине, необходимо уделять внимание потенциальной проблеме
фрагментации пространства, занимаемого файлами на дискете. Обычно эти
проблемы Вас волновать не будут, но иногда они могут приобрести
чрезвычайное значение. В тех случаях, когда фрагментация файлов покажется
Вам нежелательной, скопируйте файл на новую дискету. Это же полезно
делать, если Вам покажется, что дисковод слишком долго выполняет поиск
дорожек при чтении файла.
При копировании файлов на новую дискету можно заодно улучшить их
последовательность, разместив в начале часто использующиеся файлы или
переставив их в таком порядке, в каком Вам хотелось бы их видеть в
распечатке справочника. В некоторых случаях упорядочение данных может
оказаться особенно полезным: файлы на дискете, хранящей корреспонденцию,
лучше размещать в хронологическом порядке, для дискеты с множеством
вспомогательных файлов предпочтительнее всего алфавитный порядок,
ускоряющий просмотр. Полезно бывает, также, упорядочивать файлы по
расширениям, которые обычно обозначают тип файла или способ его
использования. Такое упорядочивание можно производить либо вручную, либо с
помощью какой-либо сервисной программы (такого рода программы имеются в
составе пакета "Norton Utilities" (служебные программы Нортона)).
5.9.Формат текстового файла
Наиболее часто использующийся и один из самых важных форматов для
файлов данных, размещаемых на дискетах,- это текстовый файл в коде ASCII.
Такие файлы содержат обычную алфавитную информацию, тексты или отчеты,
состоящие из алфавитных символов.
Текстовые файлы являются, вероятно, наибольшим приближением к
универсальному формату для всех персональных компьютеров. Такой формат
поддерживается практически всеми персональными компьютерами и имеет
множество различных применений.
Большинство текстовых редакторов, включая и текстовые процессоры,
используют текстовый формат. Редактор, поставляемый в составе ДОС, ЕDLIN,
создает и использует текстовые файлы.
Текстовый формат используется для хранения исходного текста программ
(исходной, нетранслировавшейся версии). Практически все языковые
процессоры (такие как интерпретатор языка БЕЙСИК, компилятор языка Паскаль
или Ассемблер) ожидают ввода входного файла в текстовом формате в коде
ASCII.
Интерпретатор языка БЕЙСИК для IBM/PC работает с тремя форматами
файлов программ на языке БЕЙСИК одним из которых является стандартный
текстовый формат в коде ASCII. Для записи программы на языке БЕЙСИК в
текстовый файл в коде ASCII нужно использовать ключ "А" в операторе SAVE:
10 SAVE "PROGRAM.BAS",А
Файлы пакетной обработки, одно из самых мощных и полезных
вспомогательных средств ДОС, также хранятся в текстовом формате.
Чтобы понять структуру файлов, необходимо сначала понять саму
кодировку, принятую в Американском стандартном коде для обмена информацией
(ASCII). Код ASCII в основном состоит из кодов символов. Всем символам
присваиваются определенные комбинации битов, например, код для заглавной
буквы "А" будет выражаться шестнадцатиричным числом 41.
Существует 128 различных кодов в системе ASCII, поскольку в ней
используются семибитовые коды. Большинство компьютеров, включая IBM/PC,
используют восьмибитовую кодировку символов, так что коды ASCII составляют
лишь половину из ансамбля 256 возможных кодов. Для большинства
компьютеров, и для IBM/PC, коды ASCII занимают первые 128 кодов, от CHR$
(0) до СHR$ (127).
Вообще говоря, имеется три различных категории кодов ASCII и две из
них будут нас интересовать. Прежде всего, имеются коды ASCII,
соответствующие буквам, знакам препинания, цифрам и т.п. Это первая из
категории кодов ASCII и, конечно, они будут использоваться во всех наших
работах, выполняемых с помощью персонального компьютера.
Следующую категорию я бы назвал символами форматирования.
Использование этих символов следует уже из их названий, например, "возврат
на шаг", "возврат каретки" и "перевод строки". Форматирующие символы
разрабатывались специально для управления устройством печати. Эта
категория нам также понадобится и мы еще к ней вернемся.
Третью категорию символов ASCII можно назвать символами связи. Они
имеют такие имена как "начало-текста" или "конец-передачи" и используются
главным образом в качестве управляющих сигналов при использовании кода
ASCII для передачи информации по линиям связи. Эти символы позволяют
управлять процессами установления связи и передачи данных. Полное
разъяснение назначения этих символов тесно связано с изложением принципов
осуществления взаимодействия по линиям связи, что не входит в сферу
изложения данной книги. Поскольку эта категория символов не используется
среди данных или в структуре файлов, она больше не будет нас интересовать.
Подведем некоторые итоги: одна из трех категорий кодов ASCII
используется для кодировки данных, таких как буквы, цифры и знаки
пунктуации. Вторая используется для форматирования, т.е., для указания
того, где заканчивается одна строка и начинается другая; эти коды
используются не только для управления форматом печати, но и для
структурирования файлов. И, наконец, третья категория для управления
передачей данных и никак не связаны с форматом текстовых файлов.
Обычные символы текста в коде ASCII имеют значения от CHR$(32) до
CHR$(126). Символы ASCII двух специальных категорий - форматирующие и
символы связи,- имеют коды от CHR$(0) до CHR$(31). Все эти коды должны
использоваться для различных управляющих функций и они обычно используются
отдельно от кодов данных. Если Ваша программа попытается непосредственно
использовать эти коды, могут происходить странные вещи. Некоторые ситуации
описываются в приложении 4.
Ниже приведены три простые программы на языке Бейсик, которые
демонстрируют ряд экспериментов со специальными кодами ASCII от 0 до 31:
10 REM вывод на экран дисплея
20 FOR I=0 TO 31
30 PRINT CHR$(I)
40 NEXT I
10 REM вывод на печать
20 FOR I=0 TO 31
30 LPRINT CHR$(I)
40 NEXT I
10 REM манипулирование режимом экрана
20 DEF SEG=&HB800 ' цветная графика
30 DEF SEG=&HB000 ' монохромный
40 FOR I=0 NJ 31
50 POKE 1*2,I
60 NEXT I
Теперь рассмотрим текстовые файлы в коде ASCII. Это файлы, содержащие
текст, который состоит из обычных символов, например, букв алфавита.
Символы текстового файла организуются в строки, подобно тому как они
записываются на бумаге.
Границы строк отмечаются форматирующими символами кода ASCII: возврат
каретки, CHR$(13), и перевод строки, CHR$(10). Можно было бы использовать
любой символ для обозначения конца строки, но используются именно эти два
символа, поскольку они управляют процессом перехода к новой строке на
печатающем устройстве.
Одна из причин использования двух символов, обозначающих конец
строки, состоит в обеспечении возможности наложения строк. Наиболее часто
такая возможность используется для выполнения подчеркивания. При этом на
печать в конце строки выдается только возврат каретки, а затем
накладывающиеся символы. Поскольку перевод строки не выполнялся, новые
символы печатаются поверх уже напечатанных. Такую операцию можно
произвести с печатающим устройством, но нельзя с дисплеем.
Таким образом, физические команды, необходимые печатающему устройству
для завершения строки, используются также в качестве логических меток
конца строки в файле. Такой прием позволяет копировать текстовые файлы
непосредственно на печатающее устройство, причем текст будет
распечатываться правильно. Вы можете сами проверить это, использовав
команду COPY для пересылки файла непосредственно на устройство печати или
на экран дисплея следующими командами:
COPY имя файла LPT1
COPY имя файла CON
Длина строки текстового файла ничем не ограничивается, строка
продолжается, пока не встретятся символы возврата каретки и перевода
строки. Однако, большинство программ, работающих с текстовыми файлами,
ограничивают длину строки 255 символами, что обычно значительно больше,
чем может потребоваться (некоторые редакторы и текстовые процессоры
ограничивают длину строки данных таким образом, чтобы они укладывались в
строку экрана дисплея: 80 символов).
Формат текстового файла определяется не только разделением на строки.
Все файлы в коде ASCII имеют один общий элемент - маркер конца файла,
значение которого CHR$(26). Этот маркер однозначно указывает конец файла.
Обнаружение положения кода CHR$(26) позволяет точно установить размер
файла, отличающийся от размера, указанного в справочнике.
С клавиатуры этот специальный символ с кодом CHR$(26) можно ввести,
нажав клавишу "Z" и удерживая в нажатом состоянии клавишу "CONTROL"