Главная  Терминология Хоора 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ 18 ] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

указатель н,ачала каждой дорожки служит естественным щ. кером сегмента, и, возможно, обращение к нему легче и посредственнее, чем к маркерам на каком-либо последов, тельном устройстве. Для адресации дорожек, с котор^! начинаются сегменты, и обозначения текущей длины сегмец, тов может использоваться, например, индексированная тас' лица в основной памяти (рис. 1.10).

Это приводит нас к так называемым индексировать^ файлам (иногда также называемым файлами с прямым бо ступом). В настоящее время барабаны и диски организованц

таблица индексов

МММ

ттп Mini rm-nj

Рис. 1.10. Индексированный файл с пятью сегментами.

таким образом, что каждая дорожка содержит много физя-ческих меток, с которых может начинаться чтение или запись Поэтому нет необходимости, чтобы каждый сегмент занимав ее целиком, поскольку это может привести к неэкономном)] расходованию памяти, если сегменты коротки по сравненик] с длиной дорожки. Область памяти между двумя меткам1( называется физическим сегментом или сектором в отличи! от логического сегмента, который является понятием, отно сящимся к структуре данных программы. Разумеется, каждый физический сегмент содержит самое большее один логический сегмент, а каждый логический сегмент (даже пустой) занимает по меньшей мере один физический сегмент. Следуй иметь в виду, что, хотя речь и идет о файлах с прямы доступом , среднее время нахождения сегмента, так назЫ ваемое латентное время, равно половине времени полног оборота диска.

У индексированных файлов сохраняется также то ochobhoi свойство, что запись производится последовательно в и) конец. Поэтому они особенно полезны в случаях, когда из# нения происходят сравнительно редко. Изменения произво' дятся либо при помощи увеличения файла, либо при помой копирования и обновления всего файла. Просмотр мож^ осуществляться намного быстрее, если используются индекс ные указатели. Это типичная ситуация для так называемы* банков дйнных.



Системы, которые допускают выборочное изменение фраг-итов в середине файла, обычно сложны и пользоваться ими кованно, поскольку новые порции информации должны Jb того же размера, что и старые, на место которых они писываются. Кроме того, при обработке большого объема нных не рекомендуется выборочное изменение, поскольку *пй любой неудаче - чем бы она ни была вызвана: ошибкой Рцрраммы или сбоем оборудования - по правилам должно ушествовать некоторое состояние, к которому следует вернуться, с тем чтобы возобновить и повторить прерванную )аботу'. Поэтому обновление обычно происходит целиком: тарый файл заменяется новой, измененной копией только 10сле того, как последовательная проверка установит пра-шльность нового файла. Для обновления последовательная )рганизация является наиболее надежной. Ее следует пред-ючесть более сложным способам организации данных больного объема. Эти способы могут быть эффективнее, но они [зсто приводят к полной потере данных при сбое оборудо-шиия.

1.11.3. Тексты

Файлы, состоящие из компонент типа char (символьного), 1грают особо важную роль в вычислениях и обработке (энных: они обеспечивают взаимодействие между вычисли-ельными системами и пользователями. Читаемый вход, ор-анизуемый программистом, так же как читаемый выход, содержащий результаты вычислений, представляют собой по-;ледовательности символов. Поэтому таким типам данных фисваивается стандартное имя:

type text = file of char

В конечном счете взаимодействие между вычислительным

фоцессом и человеком можно представить двумя текстовыми

файлами. Один из них содержит входную информацию

[input) для вычислительного процесса, другой - результаты

вычисления, называемые выходной информацией {output).

- этого момента мы будем считать, что каждая программа

-одержит описания этих двух файлов, имеющие следующий адд:

хат input, output: text

Учитывая, что эти файлы соответствуют стандартным -Редствам ввода и вывода вычислительной системы (таким, Щ устройство чтения с перфокарт и устройство вывода на чать), мы будем считать, что файл input можно только ъ, а в файл output можно только писать.

Поскольку эти два стандартных файла используются ень часто, мы определим, что если первый параметр



процедур read и write не является файловой переменной, умолчанию предполагаются соответственно файлы 1прщ output. Кроме того, мы позволим этим двум стандартна процедурам иметь произвольное число аргументов. Суы^ руем введенные выше обозначения:

read(xl.....хп) означает read{input, xl, хп)

write(x\, хп) означает write{output, xl, хп) readif, xl, хп) означает

beamreadif, xl); read{f, xn)end write(f, xl, xn) означает

beginte)n7e(x, xl); write{f, x )end

Тексты являются типичным примером последовательв стей;-в-которых обнаруживается-недетруктура. Принять единицы этой подструктуры - это главы, абзацы и строк Обычный способ изображения подструктуры текста - испол. зование специальных разделительных символов. Наибой известный пример - символ пробела, но подобные симво; могут использоваться и для указания концов строк, абзащ и глав. Например, широко распространенное множество т волов ISO, включая его американскую версию ASCII, содс жит несколько таких элементов, называемых управляюши символами (см. приложение А).

В этой книге мы не будем использовать специальные ра делительные символы и задавать какой-либо способ пре ставления подструктуры. Вместо этого мы рассмотрим тек как файл, состоящий из символьных последовательност! представляющих отдельные строки. Кроме того, мы огран чимся одним уровнем подструктуры, а именно строкой. О нако вместо того, чтобы определить тексты как файлы фа лов печатаемых символов, мы рассматриваем их как фай. символов и вводим дополнительные операции и предика: для управления, т. е. для отметки и распознавания строк. 1 смысл легче понять, если предположить, что строки раз/ ляются (гипотетическими) разделительными символами ( принадлежащими к типу char), а задача этих операи и предикатов - поиск и распознавание таких символов-р' делителей. Дополнительные операции следующие:

writelnif) - добавить признак конца строки к файлу / readln(f) - пропустить символы файла f до символа, торый непосредственно следует за очереди^ символом конца строки. eoinif) - булевская функция. Истинна, если позиция фа указывает на признак конца строки, иначе ло.Ф Предполагается, что если eoln{f) истинна, /1 = пробел.




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ 18 ] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133