Организация работы с текстовыми файлами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Организация работы с текстовыми файлами



Текстовый файл можно рассматривать как последовательный файл, но этот тип файлов из-за своих особенностей выделен в отдельный тип.

Этот файл состоит из символов, среди которых могут встречаться специальные символы, называемые конец строки. Признак конец строки по разному хранится на разных внешних устройствах. Так на экране дисплея – это перевод курсора в начало следующей строки экрана, на клавиатуре – нажатие клавиши ENTER, на принтере – перевод печатающей головки в крайнее левое положение и прогон бумаги на одну строку вверх, на магнитном диске – это один или два машинных кода (в зависимости от операционной системы).

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

type text=file of char;

Для удобства текстовый файл можно рассматривать как последовательность позиций, в каждой из которых могут находиться любой из символов, признак конец строки и в последней позиции - признак конец файла. Для дальнейшего объяснения введем понятие текущая позиция текстового файла - позиция, с которой связан буфер файла.

Буфер текстового файла, в отличие от других видов файлов, определяется при генерации операционной системы и имеет размер 128 или 255 байтов (Турбо Паскаль позволяет устанавливать размер буфера текстового файла с помощью процедуры SetTextBuf).

При работе с текстовым файлом можно пользоваться следующими процедурами и функциями:

procedure reset(var <имя логического файла (в дальнейшем илф)>:text);

procedure rewrite(var <илф>:text);

procedure append(var <илф>:text);

procedure write(var <илф>:text;<записываемое в файл значение>:<имя типа для записи>);

procedure writeln(var <илф>:text);

procedure read(var <илф>:text;var <имя переменной>:<имя типа для чтения>);

procedure readln(var <илф>:text);

procedure flush(var <илф>:text);

function eof(var <илф>:text):boolean;

function eoln(var <илф>:text):boolean;

function seekeoln(var <илф>:text):boolean;

function seekeof(var <илф>:text):boolean;

Примечания: тип для операции записи – это любой целый, любой вещественный, логический boolean, литерный char, любой строковый тип;
тип для операции чтения – это любой целый, любой вещественный, литерный char, любой строковый тип;

Процедура записи в текстовый файл WRITE

Запись в текстовый файл значения в символьном виде осуществляется с помощью обращения к стандартной процедуре

write(<имя файловой переменной типа text>,<объект вывода>)

,где объект вывода определяется

<выражение>[:<минимальное количество позиций в символьном файле под значение выражения>
[:<количество позиций в строке символьного файла
под дробную часть вещественного числа>]]

Из определения объекта вывода видно, что второй параметр процедуры write через двоеточие может сопровождаться дополнительной информацией – целым числом без знака типа byte. Это число определяет количество позиций в текстовом файле, отводимых под значение выражения, которое записывается в файл.

Результат выражения в объекте вывода может быть:

- любого из числовых типов;

- символьного типа char;

- любого из строковых типов string;

- логического типа boolean.

Правила выполнения обращения к процедуре write

Процедура write может быть выполнена только в том случае, если до выполнения процедуры буфер файла установлен на конец файла (для текстовых файлов это выполняется автоматически).

При выполнении процедуры write выполняются следующие действия:

1) - вычисляется значение выражения;

2) - осуществляется преобразования полученного значения в последовательность символов (не путать со строкой символов). Это не выполняется только для выражения типа CHAR;

3) - определяется количество позиций в символьном представлении значения;

4) - если при обращении к процедуре write второй параметр – выводимое выражение сопровождается через двоеточие дополнительной информацией -целым числом без знака, то возможно преобразование полученной последовательности символов. Это преобразование зависит от типа выражения, являющимся вторым параметром (правила преобразования указаны ниже);

5) - полученная последовательность символов заносится в буфер файла;

6) - как только буфер заполняется полностью, информация из буфера записывается в файл, начиная с позиции признака конец файла, с которым обязательно связан буфер до выполнения процедуры write. После последнего записанного в файл символа записывается признак конец файла. Буфер освобождается и связывается с позицией, в которой расположен этот признак. Так может повторяться до тех пор, пока вся полученная последовательность символов не занесется в буфер. Если буфер не заполнился полностью, то символы пока остаются в буфере.

Правила преобразования последовательности символов при записи в файл

Эти правила используются только в том случае, когда второй параметр при обращении к процедуре write сопровождается дополнительной информацией, и зависят от типа второго параметра.

Вариант 1: второй параметр любого целого типа

Если количество символов, полученных при преобразовании целочисленного значения в последовательность символов, меньше, чем число, указанн6ое в дополнительной информации, то слева к символам добавляются пробелы, так, чтобы количество полученных символов равнялось числу в дополнительной информации.

Вариант 2: второй параметр любого вещественного типа

Вещественное значение представляется в показательной форме с нормализованной мантиссой:

<знак числа><значащая цифра>. <цифры дробной части мантиссы>
e<знак порядка><целочисленный порядок>

Если математический сопроцессор не подключен, то дробная часть мантиссы содержит 10 цифр, целочисленный порядок – 2 цифры; при подключенном математическом сопроцессоре – соответственно 14 и 4 цифры.

В этом варианте результат преобразования последовательности символов зависит от настройки среды программирования (подключен или нет математический сопроцессор) и количества параметров в дополнительной информации (нет дополнительной информации, одно число в дополнительной информации или два числа):

a) если дополнительная информация отсутствует, то последовательность символов соответствует показательному (научному) формату числа, указанному в начале варианта (вместо знака числа плюс записывается пробел).

b) Если дополнительная информация состоит из одного числа, то это число может оказать влияние на количество позиций, отводимых в текстовом файле под символьное представление вещественного числа.

Если сопроцессор отсутствует и число в дополнительной информации меньше или равно 8, то последовательность символов преобразуется к следующему виду:

Zx. xEzxx

, где Z – знак числа (символ пробел, если знак плюс, символ -, если знак минус);

x – символ любой арабской цифры (первая цифра мантиссы всегда не 0);

z – знак порядка (символ + или символ -).

Если сопроцессор подключен и число в дополнительной информации меньше или равно 10, то последовательность символов преобразуется к следующему виду:

Zx.xEzxxxx

Если сопроцессор отсутствует и число в дополнительной информации,больше 17, то слева к символам числа добавляются пробелы, так чтобы количество полученных символов равнялось дополнительной информации. В случае подключенного сопроцессора такие действия выполняются, когда число в дополнительной информации больше 23.

При всех других значениях числа в дополнительной информации отбрасываются лишние цифры в дробной части мантиссы (для числа 10 без сопроцессора последовательность символов не изменяется, это же выполняется при наличии сопроцессора, когда число в дополнительной информации 23).

c) если дополнительная информация состоит из двух чисел (второе число всегда меньше первого), последовательность символов преобразуется к представлению числа с фиксированной точкой, общепринятому в арифметике. Здесь второе число в дополнительной информации определяет количество позиций в дробной части записываемого в файл числа. А первое число задает общее количество позиций в записываемом числе, включая знак числа и десятичную точку. Если определяемое первым числом количество позиций не позволяет представить выводимое число, то это первое число не оказывает влияния на выделяемое в файле количество позиций под символьное представление записываемого числа. Если первое число в дополнительной информации позволяет представить в символьном виде записываемое число, то слева к символьному представлению могут добавляться пробелы, так чтобы количество позиций в последовательности символов равнялась первому числу в дополнительной информации.

Вариант 3: второй параметр типа CHAR

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

Вариант 4: второй параметр любого строкового типа

Здесь число в дополнительной информации определяет минимальное количество позиций под символьное значение. Последовательность записываемых символов преобразуется по следующему правилу – если количество символов меньше, чем заданное число в дополнительной информации, то слева приписываются пробелы, так чтобы длина образованной последовательности символов равнялась числу в дополнительной информации.

Вариант 5: второй параметр типа boolean

В результате преобразования логического значения получается либо последовательность из четырех символов TRUE, либо последовательность из 5 символов FALSE. Дальнейшее преобразование этих последовательностей символов производится так же, как и в предыдущем варианте 4.



Поделиться:


Последнее изменение этой страницы: 2016-06-26; просмотров: 313; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.28.48 (0.017 с.)