Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Прямой доступ к элементам файла
Несмотря на то, что в стандартном Паскале имеются лишь файлы последовательного доступа, Турбо Паскаль содержит процедуры и функции для более эффективной работы с файлами. В частности, имеется возможность осуществлять прямой доступ к элементам файла. Установка указателя Процедура Seek (<имя файловой переменной>, N) устанавливает файловый указатель на N-й элемент. Например, Seek (F1, 3). Напомним, что элементы файла нумеруются с нуля. Определение номера элемента Функция FilePos (<имя файловой переменной>) возвращает номер элемента, на который "смотрит" файловый указатель. Пример Найти номер элемента, с которым будет выполняться следующая операция. Решение Воспользуемся функцией FilePos: N:=FilePos(F1).
Определение количества элементов в файле Функция FileSize (<имя файловой переменной>) возвращает количество элементов в файле.
Удаление и переименование Файлов Удаление файлов. Процедура Erase (<имя файловой переменной>) удаляет файл на внешнем носителе, с которым связана файловая переменная. Переименование файлов. Процедура Rename (<имя файловой переменной>, '<новое имя на диске>') переименовывает файл, связанный с данной файловой переменной. Пример 1 Ввести с клавиатуры и записать в файл DAN1.DAT последовательность целых чисел. Решение Сначала свяжем файловую переменную с конкретным внешним файлом при помощи процедуры Assign. Откроем файл для записи посредством процедуры Rewrite. Признак конца последовательности чисел − ввод числа 0. Program Example_83; Var F: File Of Integer; n: Integer; Begin Assign(F, 'DAN1.DAT'); {Связываем файловую переменнуюс файлом на диске} Rewrite(F); {Открываем файл для записи} Writeln('Конец ввода чисел - 0'); Repeat {Пока не будет введен 0} Writeln('Введите число '); Readln(n) ; {Если введено число, отличное от 0, то записываем его в файл} If n<>0 Then Write(F, n); Until n=0; {Если введен 0, то выходим из цикла} Close(F); {Закрываем файл} End. Пример 2 В файле DAN1.DAT записаны целые числа (см. предыдущую задачу). Вычислить сумму элементов файла и результат вместе с исходными данными записать в файл DAN2.DAT. Program Example_84; Var F1, F2: File Of Integer; {Файловые переменные} S, N: Integer; Begin{С файловой переменной F1 связываем файл на диске} Assign(F1, 'DAN1.DAT'); Reset(F1); {Открываем файл F1 для чтения} Assign(F2,'DAN2.DAT') ; {С файловой переменной F2 связываем файл на диске} Rewrite(F2) ; {Открываем файл F2 для записи} S:=0; While Not EOf (F1) Do {Проверка на конец файла F1} Begin Read(F1, N); {Чтение элемента из файла F1} S:=S+N; {Накопление суммы} Write(F2, N); {Запись элемента в файл F2} end; Write(F2, S); {Запись суммы элементов в конец файла F2} Write('Результат находится в файле DAN2.DAT') Close(F1); {Закрываем файл F1} Close(F2); {Закрываем файл F2} Readln; End.
Текстовые файлы Текстовые файлы состоят из символьных строк. Строки могут иметь различную длину, и в конце каждой строки стоит признак конца строки. Для описания текстовых файлов используется служебное слово Text: Var A: Text;
Обработка текстовых файлов Для обработки текстовых файлов используются те же процедуры и функции, что и для обработки обычных типизированных файлов. Для связывания файловой переменной с файлом на диске употребляется процедура Assign. Текстовые файлы могут быть открыты для чтения процедурой Reset или для записи процедурой Rewrite. Для чтения данных применяется процедура Read. Если необходимо после чтения данных перейти на следующую строку, то используется процедура Readln. Если необходимо просто перейти к следующей строке, то можно использовать процедуру Readln (<имя файловой переменной текстового файла>), которая устанавливает файловый указатель на первый элемент следующей строки. Процедура Write записывает данные в текущую строку. Если надо записать данные и перейти к следующей строке, то можно использовать процедуру Writeln. Если требуется только перейти для записи на новую строку, то применяется процедура Writeln (<имя файловой переменной текстового файла>), которая записывает в файл признак конца строки и устанавливает файловый указатель на начало следующей строки. Так как в строках может быть разное количество символов, имеется логическая функция Еоln (<имя файловой переменной текстового файла>), которая принимает значение True, если достигнут конец строки. Кроме перечисленных процедур и функций, к текстовым файлам применяется процедура
Арреnd (<имя файловой переменной текстового файла>). Она открывает файл для "дозаписи", помещая файловый указатель в конец файла. Пример 1 Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа с учетом разбиения на строки и подсчитать количество элементов в каждой строке. Решение Пусть в файле содержится следующая информация:
Этот файл можно создать в среде Турбо Паскаль следующим образом: ¨ создайте новый файл посредством командыNewменю File; ¨ запишите все числа, разделяя их пробелами, и разбейте на строки, как указано в задании; ¨ сохраните файл, например, под именем INT1.DAT. Этот файл используется в программе, которая приведена ниже. Program Example_85; Var F: Text; х, k: Integer; Begin Assign(F, 'INT1.DAT'); {Связываем файловую переменную с файлом на диске} Reset(F); {Открываем файл для чтения} While Not Eof (F) Do {Пока не достигнут конец файла} Begin k:=0; {Счетчик элементов строки} While Not Eoln(F) Do {Пока не достигнут конец строки} Begin Read(F, x); {Считываем очередное число} Write(х, ' '); {Выводим его на экран} Inc(k); {Увеличиваем счетчик } End; Writeln('В строке ', k,' элементов'); Readln(F); {Переходим к следующей строке файла} End; Close(F); {Закрываем файл} Readln; End. Пример 2 Дан текстовый файл, содержащий программу на языке Паскаль. Проверить эту программу на соответствие числа открывающих и закрывающих круглых скобок. Считать, что каждый оператор программы занимает не более одной строки файла. Решение Так как по условию задачи каждый оператор занимает не более одной строки, то будем подсчитывать количество открывающих и закрывающих скобок в каждой строке. Program Example_86; Var F: Text; k1, k2, n: Integer; Ch: Char; Logic, Pp: Boolean; Begin{С файловой переменной F связываем файл на диске} Assign(F, 'TEST.PAS'); Reset(F); {Открываем файл для чтения} n:=0; {Счетчик количества строк} Logic:=True; {Пока ошибок не было, переменная Logic имеет значение True} While Not EOf (F) Do {Пока не достигнут конец файла} Begin Inc(n); {Увеличиваем счетчик количества строк} k1:=0; {Счетчик количества открывающих скобок} k2:=0; {Счетчик количества закрывающих скобок} Pp:=False; {Переменная Pp предназначена для определения ошибки расстановки скобок в строке. Она принимает значение True, когда обнаруживается ошибка} While Not Eoln (F) Do {Пока не достигнут конец текущей строки файла} Begin Read(F, Ch); {Читаем очередной символ строки. Если встретили открывающую скобку, то увеличиваем соответствующий счетчик} If Ch='(' Then Inc(k1); {Если закрывающая скобка стоит после открывающей (k1>k2), то просто увеличиваем счетчик. Иначе – устанавливаем Pp в True} If (Ch=')') Then If (k1>k2) Then Inc(k2) Else Pp:=True; End; {Если не все закрывающие скобки расставлены (k1<>k2) или одна из закрывающих скобок стоит раньше открывающей (Pp=True), то была ошибка расстановки} If (k1<>k2) or Pp Then Begin Writeln('Ошибка в ',N,' строке'); Logic:=False; End; Readln(F);{Переходим на следующую строку файла} End; {Если значение переменной Logic осталось истинным, то ошибок расстановки не было} If Logic Then Writeln('Cкобки расставлены правильно'); Close(F); {Закрываем файл} Readln; End. Нетипизированные файлы
При объявлении нетипизированного файла указывается только ключевое слово, например: Var F: File. Нетипизированные файловые переменные предназначены для низкоуровневой работы с файлами. С их помощью можно обратиться к файлу любого типа и логической структуры. Необходимо только учитывать, что нетипизированные файлы не имеют жестко установленной единицы чтения/записи, как типизированные файлы. В нетипизированных файлах за одно обращение считывается/записывается число байт, приблизительно равное величине буфера ввода/вывода, что способствует увеличению скорости работы с файлами. В качестве буфера ввода/вывода нетипизированных файлов может выступать любая переменная. Для работы с нетипизированными файлами можно применять почти все процедуры и функции, что и для типизированных. Исключение составляет то, что вместо процедур Read и Write используются процедуры BlockRead и BlockWrite, а процедуры Reset и Rewrite могут иметь второй параметр типа Word, который определяет размер записи, используемый при передаче данных. Если этот параметр опущен, то размер записи принимается по умолчанию равным 128 байтам. |
|||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-31; просмотров: 237. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |