Ввод/вывод в текстовый файл

ЗАДАЧА №2

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ. ФАЙЛЫ. РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ

ТЕКСТОВЫЙ ФАЙЛ

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

ЭТАПЫ РАБОТЫ С ТЕКСТОВЫМИ ФАЙЛАМИ

O Описание файловой переменной

O Связь переменной с физическим файлом

O Инициализация (открытие) файла

O Ввод/вывод в файл

O Закрытие файла

Описание файловой переменной

Описание:

VAR : TEXT;

ПРИМЕРЫ:

TYPE FT=TEXT; {файловый тип данных- синоним TEXT} VAR A1,A2:TEXT; {описано три переменные текстового типа} A0:FT;

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

O INPUT

— связана с клавиатурой и предназначена для ввода данных;

O OUTPUT

– связана с экраном и реализует стандартный вывод данных.

Можно перенаправить стандартный ввод/вывод, используя ASSIGNдля этих переменных.

Связь переменной с физическим файлом

O ASSIGN (,)

— связывает файловую переменную с файлом или логическим устройством, имя которого находится в строковой переменной или константе . Связь сохраняется до следующего оператора ASSIGN для данной переменной или до конца программной единицы, в которой определена указанная переменная.

Логические устройства

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

O ‘CON’ – КОНСОЛЬ: ( ввод – клавиатура; вывод – экран)

O ‘PRN’ – ПРИНТЕР

O ‘LPT1’=‘PRN’,’LPT2’,’LPT3’ – ИМЕНА ПРИНТЕРОВ

O ‘AUX’=‘COM1’,’COM2’ – ИМЕНА КОММУНИКАЦИОННЫХ КАНАЛОВ

O ‘NUL’ – ПУСТОЕ ЛОГИЧЕСКОЕ УСТРОЙСТВО, (используется как «заглушка» при отладке)

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

ПРИМЕРЫ

ASSIGN(A2,’F1.TXT’); ASSIGN(A1,’PRN’);

В данном случае переменная A2 связана с текстовым файлом, а A1 – с принтером.

Открытие файла

REWRITE()

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

RESET()

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

APPEND();

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

КОРРЕКТНОЕ ОТКРЫТИЕ ФАЙЛА

{$I-}{отключить контроль ошибок ввода/вывода – директива компилятора} APPEND(A2); {открыть файл на дозапись} {$I+}{включить контроль ошибок ввода/вывода – директива компилятора} IF IORESULT0 THEN {проверить функцию ошибки} … {действия в случае ошибки – отсутствия файла на диске} ELSE … {действия в случае успешного открытия файла}

Ввод/вывод в текстовый файл

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

ЧТЕНИЕ

O READ (,)

O READ () (ввод из переменной input)

– ввод осуществляется до тех пор, пока не встретится признак конца строки или конца файла, поэтому таким образом нельзя считать последовательность строк;

O READLN (,)

O READLN() (ввод из переменной input)

– осуществляется ввод , а затем указатель файла устанавливается на следующую строчку

— список переменных любых базовых типов, кроме BOOLEAN.

ЗАПИСЬ

O WRITE (,)

O WRITE () (вывод в переменную output)

– вывод содержимого ;

O WRITELN (,)

O WRITELN () (вывод в переменную output)

– вывод содержимого , а затем символа перевода строки.

— список переменных и/или констант любых базовых типов. В нем могут быть указаны форматы – через двоеточие – количество позиций для вывода (если требуется больше, то вывод не обрезается, а если меньше, то дополняется пробелами слева. А для вещественных может быть также указано количество полей для дробной части).

2.1.5Закрытие файла

O CLOSE()

— закрытие файла.

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

ПОЛЕЗНЫЕ ФУНКЦИИ ДЛЯ ОРГАНИЗАЦИИ ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА К ТЕКСТОВОМУ ФАЙЛУ

O EOF()

– функция возвращает true, если указатель файла находится в его конце, иначе – false;

O EOLN ()

– функция возвращает true, если указатель файла находится в конце строки или файла, иначе – false;

O SEEKEOF ()

– функция типа boolean: пропускает все пробелы и символы табуляции до маркера конца файла или первого значащего символа и возвращает true, если маркер найден.

O SEEKEOLN ()

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

ПРОЦЕДУРА СОЗДАНИЯ ТЕКСТОВОГО ФАЙЛА

PROCEDURE CREATE(NAME:STRING); VAR F:TEXT; {файловая переменная} X:STRING; BEGIN ASSIGN (F,NAME); {файловая переменная связана с файлом с именем NAME} {$I-} REWRITE(F); {открыть файл на запись (перезапись)} {$I+} IF IORESULT=0 THEN {если файл открыт} BEGIN WRITELN(‘VVEDITE CHISLA (OSTANOVKA ‘’’’):’); READLN(X); WHILE X’’ DO {вводим строчки в цикле до пустой строки и записываем их в файл} BEGIN WRITELN (F,X); READLN(X); END; CLOSE(F); {закрыть файл} END; END;

ПРОЦЕДУРА РАСПЕЧАТКИ СОДЕРЖИМОГО ТЕКСТОВОГО ФАЙЛА

PROCEDURE PRINT(NAME:STRING); VAR F:TEXT; {файловая переменная} X:STRING; BEGIN ASSIGN (F,NAME); {файловая переменная связана с файлом с именем NAME} {$I-} RESET(F); {открыть файл на чтение} {$I+} IF IORESULT=0 THEN {если файл открыт} BEGIN WHILE NOT(EOF(F)) DO {пока не достигнут конец файла } BEGIN{читаем строчку из файла и выводим ее на консоль} READLN(F,X); WRITELN(X); END; CLOSE(F); {закрыть файл} END; END;

ПРОЦЕДУРА УДАЛЕНИЯ ИЗ ФАЙЛА ВСЕХ ЗВЕЗДОЧЕК (РЕЗУЛЬТАТ ЗАПИСЫВАЕТСЯ В НОВЫЙ ФАЙЛ)

PROCEDURE DEL(NAME,NAMENEW:STRING); VAR F,FNEW:TEXT; {файловые переменные} S:STRING;I:INTEGER; BEGIN ASSIGN (F,NAME); ASSIGN (FNEW,NAMENEW); {файловые переменные связаны с файлами на диске} {$I-} RESET(F); {открыть файл name на чтение} {$I+} IF IORESULT=0 THEN BEGIN {если файл открыт} {$I-} REWRITE(F); {открываем на запись файл namenew} {$I+} IF IORESULT=0 THEN BEGIN {если файл открыт} WHILE NOT(EOF(F)) DO BEGIN {пока не конец файла f} READLN(F,X); {читаем строку} I:= POS(‘*’,S); {ищем первое вхождение ‘*’} WHILE I0 DO BEGIN {пока есть ‘*’ в строке} DELETE(S,I,1); {удаляем ‘*’ и ищем следующее вхождение} I:= POS(‘*’,S); END; WRITELN(FNEW,S); {преобразованную строку пишем в новый файл} END; CLOSE(FNEW); {закрыть файл} END; CLOSE(F); {закрыть файл} END; END;

ПРИМЕР ПРОГРАММЫ, ИСПОЛЬЗУЮЩЕЙ ПРИВЕДЕННЫЕ ВЫШЕ ПОДПРОГРАММЫ

BEGIN CREATE(‘FILE1.TXT’); {создать файл} PRINT(‘FILE1.TXT’); {распечатать файл} DEL(‘FILE1.TXT‘, ‘FILE2.TXT’); {преобразовать содержимое 1-го файла во 2-ой} PRINT(‘FILE2.TXT’); {распечатать измененный файл} READLN; END.

ЗАДАНИЯ

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

1. Процедуру формирования исходного файла;

2. Процедуру вывода результата работы программы;

3.Одну или более процедур (функций), реализующих вычислительную часть алгоритма.

Все подпрограммы-процедуры и подпрограммы-функции должны содержать список параметров, причем файл должен передаваться как параметр процедуры (функции).

Основная программа должна содержать только операторы вызова подпрограмм.

ВАРИАНТЫ

Постановка задачи
Даны два текстовых файла f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой строки и позицию первого символа в этой строке, в которых файлы различаются между собой. В случае, когда один из файлов имеет n компонент (n0) и повторяет начало другого (более длинного файла), ответом должно быть число n+1.
Дан текстовый файл f, состоящий из нескольких строк. Исключить пробелы, стоящие в концах его строк. Результат поместить в файл f1.
Дан текстовый файл f, строка s. Получить все строки файла f, содержащие в качестве фрагмента строку s.
Дан текстовый файл f. Переписать компоненты файла f в файл g, вставляя в начало каждой строки по одному пробелу. Порядок компонент должен быть сохранен.
Дан текстовый файл f. Записать в перевернутом виде строки файла f в файл g. Порядок строк в файле g должен быть сохранен.
Дан текстовый файл f. Переписать файл f в файл g в порядке убывания длин строк.
Дан текстовый файл f, состоящий из нескольких строк. Переписать в файл g все компоненты файла f с заменой в них символа ‘0’ на символ ‘1’ и наоборот.
Дан текстовый файл f. Переписать в файл g все его строки, содержащие более 60 символов в обратном порядке.
Дан текстовый файл f, содержащий программу на языке Паскаль. Проверить эту программу на несоответствие числа открывающих и закрывающих круглых скобок: а) Когда оператор программы занимает не более одной строки файла f б) Когда оператор программы может занимать произвольное число строк файла
Дан текстовый файл f, состоящий из нескольких строк, содержащих следующие знаки корректуры: $ — сделать красную строку, # — удалить следующее слово, @ удалить следующую фразу (т.е. все символы до конца строки). Произвести указанную корректировку и записать результат в новый файл g.
Дан текстовый файл f, состоящий из нескольких строк. В каждой строке найти наибольшее количество цифр, идущих подряд. Из этих значений сформировать файл h.
Дан текстовый файл f, состоящий из нескольких строк. Переписать его в файл g следующим образом: если в тексте нет символа ‘*’, то оставить этот текст без изменения, иначе каждую из малых латинских букв, предшествующую первому вхождению символа ‘*’ заменить на цифру 3
Дан текстовый файл f, состоящий из нескольких строк. Переписать его в файл g следующим образом: если в тексте нет символа ‘+’, то оставить этот текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа ‘+’ заменить на символ ‘-‘
Дан текстовый файл f, каждая строка которого состоит из слов, разделенных одним и более пробелами. Для каждого из слов указать, сколько раз оно встречается среди всех слов, образующих текст. Из этих значений сформировать новый файл g.
Дан текстовый файл f, каждая строка которого состоит из слов, разделенных одним и более пробелами. Найти все слова, содержащие наибольшее количество гласных латинских букв (a, e, i, o, u). Сформировать из этих слов новый файл g.
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков ‘+’, ‘-‘, ‘*’. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков. Выяснить, встречается ли в данном тексте группа букв one. Соответствующее сообщение дописать в конец файла.
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков ‘+’, ‘-‘, ‘*’. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков. Выяснить, верно ли, что в данном тексте больше групп букв, чем групп знаков. В первом случае в новый файл g вывести все группы букв, во втором – все группы знаков.
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков ‘+’, ‘-‘, ‘*’. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков. Если в данном тексте имеется не менее двух групп букв, то каждый знак ‘+’, встречающийся между двумя первыми по порядку группами букв, заменить цифрой 1, знак ‘-‘ заменить цифрой 2, а знак ‘*’ заменить цифрой 3. В противном случае текст оставить без изменений.
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков ‘+’, ‘-‘, ‘*’. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков. Подсчитать число вхождений буквы f в первые три группы букв. Букву f и найденное количество дописать в конец файла.
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков ‘+’, ‘-‘, ‘*’. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков. Найти число таких групп, которые начинаются и заканчиваются одной и той же буквой. Все эти группы вывести в новый файл g
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков{+,-,*}. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосред- ственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков. Найти все такие группы, в которые буква ‘a’ входит не менее двух раз, и вывести их в новый файл g.
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков ‘+’, ‘-‘, ‘*’. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует пробел. Аналогично определяется группа цифр и группа знаков. Найти самую длинную (первую по порядку) группу цифр и дописать ее в конец файла g.
Дан текстовый файл f, каждая строка которого состоит из слов, разделенных одним и более пробелами. Найти все слова, в которых доля букв a,b максимальна (при этом учитывать общее количество букв в слове). Записать их в новый файл g
Дан текстовый файл f, каждая строка которого состоит из слов, разделенных одним и более пробелами. В тех словах, которые оканчиваются сочетанием букв ing, заменить это окончание на ed. Записать их в новый файл g.

Pascal. Ввод-вывод. Текстовые файлы


Похожие статьи.

Понравилась статья? Поделиться с друзьями: