Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Процедуры работы с файлами.




ЛАБОРАТОРНАЯ РАБОТА №10

Тема “Текстовые файлы, строковые процедуры и функции”

 

Вариант №1

Даны символьный файл f, содержащий произвольный текст длиной более 500 слов. Слова в тексте разделены пробелами и знаками препинания. Получит 20 наиболее часто встречающихся слов и частоту их появления.

Вариант №2

Дан текстовый файл f. Записать в перевернутом виде строки файла f в файл g. Порядок строк в файле g должен совпадать с порядком исходных строк в файле f.

Вариант №3

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

Вариант №4

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать все слова в алфавитном порядке.

Вариант №5

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать все различные слова, указав для каждого из них число его вхождений в текст.

Вариант №6

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

Вариант №7 (6 баллов)

Дан текстовый файл f. Записать в перевернутом виде строки файла f в файл g. Порядок строк в файле g должен быть обратным по отношению к порядку строк исходного файла.

Вариант №8 (5 баллов)

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать текст, предварительно преобразовав его по следующему правилу: если слово нечетной длины, то удалить его среднюю букву.

Вариант №9

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать те слова текста, в которых гласные буквы (a, e, i, o, u) чередуются с согласными.

Вариант №10

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать эту же последовательность слов, но удалив из нее повторные вхождения слов.

 

Вариант №11

Даны две литеры – латинская буква (от a до h) и цифра (от 1 до 8), например, a2 или g5. Рассматривая их как координаты поля шахматной доски, на котором находится ферзь, перечислить координаты полей, которые бьет этот ферзь.

Вариант №12

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать текст, предварительно преобразовав его по следующему правилу: оставить в слове только первые вхождения каждой буквы.

Вариант №13

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать те слова текста, которые отличны от последнего слова и в которых буквы упорядочены по алфавиту.

Вариант №14

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать эту же последовательность слов, но в обратном порядке.

 

Вариант №15

Дан символьный файл f. Найти самое длинное слово среди слов, вторая буква которых есть “e”. Если слов с наибольшей длиной несколько, то найти последнее. Если таких слов нет вообще – сообщить об этом.

Вариант №16

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать текст, предварительно преобразовав его по следующему правилу: перенести первую букву в конец слова.

Вариант №17

Дан символьный файл f. Удалить из него все однобуквенные слова и лишние пробелы.

Вариант №18

Даны две литеры – латинская буква (от a до h) и цифра (от 1 до 8), например, a2 или g5. Рассматривая их как координаты поля шахматной доски, на котором находится конь, перечислить координаты полей, которые бьет этот конь.

Вариант №19

Дан символьный файл f. Получить распределение (частоту появления) длин слов файла f.

Вариант №20

Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать текст, предварительно преобразовав его по следующему правилу: удалить из слова все последующие вхождения первой буквы.

 


МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНОЙ РАБОТЫ №10 «Текстовые файлы. Работа со строками».

 

ПРОЦЕДУРЫ РАБОТЫ СО СТРОКАМИ.

Функция Length

Возвращает динамическую длину строки.

Описание: Length(s:string)

Тип результата: Целый (integer).

Примечания: Параметр s представляет собой выражение строкового типа. Результатом будет длина s.

Пример:

var s:string;

i:word;

begin s:= 'abc';

for i:=1 to Lenth(s) do

s[i]:=UpCase(s[i]);

Writeln(s); { ABC }

end.

Функция Concat

Выполняет конкатенацию последовательности строк.

Описание: Concat(s1, [s2,..., sn]; string)

Тип результата: Строковый (string).

Примечания: Каждый параметр является выражением строкового типа. Результат представляет собой конкатенацию всех строковых параметров. Если длина результирующей строки превышает 255 символов, то она усекается до 255 символов.

Пример:

var s:string;

begin

s:= Concat('ABC','DEF'); { 'ABCDEF' }

end.

Функция Copy

Возвращает для строки подстроку.

Описание: Соpy(s:string; индекс:integer; счетчик:integer)

Тип результата: Строковый (string).

Примечания: Параметр s - выражение строкового типа. Параметры "индекс" и "счетчик" являются выражениями целого типа. Функция Соpy возвращает строку, число символов которой соответствует параметру "счетчик" и которая начинается с символа строки s, номер которого задан параметром "индекс". Если значение параметра "индекс" превышает длину строки, то возвращается пустая строка. Если параметр "счетчик" задает больше символов, чем остается в строке, начиная с символа "индекс", то возвращается только остаток строки.

Пример:

var s:string;

begin

s:= 'ABCDEF';

s:= Copy(s,2,3) { 'BCD' }

end.

Процедура Delete

Удаляет из строки подстроку.

Описание: Delete(var s:string; индекс:integer; счетчик:integer)

Примечания: Параметр s представляет собой выражение строкового типа. Параметры "индекс" и "счетчик" являются выражениями целого типа. Функция Delete удаляет символы, количество которых соответствует параметру "счетчик", начиная с символа строки s, номер которого задан параметром "индекс". Если значение параметра "индекс" превышает длину строки, то символы не удаляются. Если параметр "счетчик" задает больше символов, чем остается в строке, начиная с символа "индекс", то удаляется остаток строки.

Функция Pos

Производит поиск подстроки в строке.

Описание: Pos(подстрока, s:string)

Тип результата: Байт (byte).

Примечания: Параметры "подстрока" и s являются выражениями строкового типа. Данная функция ищет подстроку, заданную параметром "подстрока", в строке s и возвращает целое значение, являющееся позицией первого символа подстроки в строке s. Если подстрока не найдена, то функция возвращает значение 0.

Пример:

var s:string;

begin

s:= ' 123.5'; { преобразует пробелы в нули }

while Pos(' ',s) > 0 do

s[Pos(' ',s)]:= '0';

end;

Процедура Insert

Вставляет в строку подстроку.

Описание: Insert(исх_строка:string; var s:string;индекс:integer)

Примечания: Параметр "исх_строка" представляет собой выражение строкового типа. Параметр s - переменная строкового типа любой длины. Параметр "индекс" является выражением целого типа. Данная процедура вставляет строку, задаваемую параметром "исх_строка", в строку, задаваемую параметром s, начиная с позиции, определяемой параметром "индекс". Если получившаяся в результате строка превышает 256 символов, то она усекается до 255 символов.

Пример:

var s:string;

begin

s:= 'Honest Lincoln';

Insert('Abe',s,8); { Honest Abe Lincoln }

Функция UpCase

Преобразует символ в прописную букву.

Описание: UpCase (символ: char)

Примечания: Параметр "символ" представляет собой выражение символьного типа. Результатом символьного типа будет символ, задаваемый параметром "символ", преобразованный в прописной символ. Значения символов, не лежащие в диапазоне а...z, остаются без изменений.

Процедура Str

Преобразует численное значение в его строковое представление.

Описание: Str(х [:размер [:десят ] ], var s:string)

Примечания: Параметр x является выражением целого или вещественного типа. Параметры "размер" и "десят" представляют собой выражения целого типа. Параметр s - строковая переменная. Данная функция преобразует x в его строковое представление в соответствии в параметрами форматирования "размер" и "десят". За исключением того, что результирующая строка сохраняется в параметре s, вместо того, чтобы записываться в текстовый файл, результат выполнения процедуры будет в точности тот же самый, что и при обращении к стандартной процедуре Write.

Пример:

function IntToStr(i:longint):string; { преобразует любое значение целого типа в строку }

var s:string[1];

begin

Str(i,s);

IntToStr:= s;

end;

begin

Writeln(IntToSt(-5322));

End.

Процедура Val

Преобразует строковое значение в его численное представление.

Описание: Val(s:string; v; var код:integer)

Примечания: Параметр s представляет собой выражение строкового типа. Параметр v является переменной целого или вещественного типа. Параметр "код" - это переменная целого типа, которая формирует все число со знаком Функция Val преобразует строку s в ее численное представление и сохраняет результат в v. Если где-либо в строке встречается недопустимый символ, то его номер сохраняется в параметре "код". В противном случае этот параметр равен нулю. В зависимости от состояния {$R} и типа параметра v функция Val по-разному выполняет проверку диапазона. Если состояние проверки диапазона установлено, то есть задано {$R+}, то выражения, выходящие за границу диапазона, всегда будут генерировать ошибку времени выполнения. Если состояние проверки диапазона сброшено, то есть задано {$R-}, то выражения, выходящие за границу диапазона, будут вызывать эффект, зависящий от их типа. Если v имеет тип real или longint, то значение v становится неопределенным и в параметре "код" возвращается ненулевое значение. Для любого другого числового типа в параметре "код" возвращается нулевое значение, а v будет содержать результат вычислений с переполнением (если предположить, что строковое значение попадает в диапазон представления длинного целого). Таким образом, процедуре Val переменную длинного целого типа (longint) и перед тем, как присваивать полученное значение, выполнять проверку диапазона.

Например:

{$R-}

Val('65536', LongIntVar, Code);

if (Code <>0) or (LOngIntVar < 0) or (LongIntVar > 65535) then...

{ ошибка }

else

WordVar:= LongIntVar;

Ограничения: Предшествующие пробелы должны быть удалены.

Пример:

var i, code:integer;

begin { получить текст из командной строки }

Val(ParamStr(1), i, code); { ошибка при преобразовании в целое значение? }

if code <> 0 then

Writeln('Ошибка на позиции:', code)

else

Writeln('Значение = ', i);

end.

ПРОЦЕДУРЫ РАБОТЫ С ФАЙЛАМИ.

Процедура Assign

Присваивает имя внешнего файла файловой переменной.

Описание: Аssign(f; имя:string)

Примечания: Параметр f является файловой переменой любого типа файла, а "имя" должно представлять собой выражение строкового типа. Дальнейшие операции с f будут выполняться с внешним файлом с именем, заданным параметром "имя". После обращения к процедуре Аssign связь, установленная между переменной f и внешним файлом будет существовать до тех пор, пока не будет выполнена другая процедура Аssign для переменной f. Имя состоит из маршрута (пути доступа), определяющего доступ к 0 или более каталогов, имена которых отделены друг от друга с помощью обратной косой черты и за которыми следует действительное имя файла: Диск:\ имя_кат\ имя_кат\...\ имя_кат\ имя_файла Если путь доступа начинается с обратной косой черты, то поиск начинается в корневом каталоге, в противном случае он начинается в текущем каталоге. "Диск" представляет собой идентификатор диска (А-Z). Если "Диск" и двоеточие будут опущены, то используется назначенный по умолчанию дисковод. Каталог "\имя_кат\имя_кат\...\имя_кат" является корневым каталогом и путем доступа к подкаталогу, в котором содержится имя файла. Параметр "имя_файла" может содержать до восьми символов, за которыми могут следовать точка и расширение имени файла, длиной до трех символов. Максимально допустимая длина всего имени файла составляет 79 символов.

Ограничения: Процедура Аssign не должна использоваться для открытого файла. Когда параметр "имя" представляет собой пустую строку, возникает особый случай, то есть Length(имя) равно нулю. В этом случае параметр f оказывается связанным со стандартным файлом ввода или стандартным файлом вывода. Эти специальные файлы позволяют инициализировать средство изменения направления ввода-вывода операционной системы ДОС. Если присвоено пустое имя, то после обращения к Rеset(f) будет указывать на стандартный файл ввода, а после обращения Rеwritе(f) f будет указывать на стандартный файл вывода.

Процедура Close

Закрывает открытый файл.

Описание: Close(f)

Примечания: Параметр f представляет собой файловую переменную любого типа файла, который был предварительно открыт с помощью процедур Rеset, Rеwrite или Аppеnd. Для внешнего файла, связанного с переменной f полностью выполняется его обновление и затем он закрывается, после чего файловый канал ДОС для данного файла освобождается для последующего использования. При использовании директивы компилятора {$I-} IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае. Пример:

var f: file;

begin

Assign(f,'\AUTOEXEC.BAT'); { открыть файл }

Reset(f,1);

Writeln('Размер файла = ',FileSize);

Close(f); { закрыть файл }

end.

Процедура Append

Открывает текущий файл для присоединения.

Описание: Append(var f:text)

Тип результата: Параметр f - файловая переменная текстового типа, которая должна быть связана с внешним файлом с помощью процедуры Аssign.

Процедура Аppеnd открывает существующий внешний файл с именем, назначенным переменной f. Если внешнего файла с указанным именем не существует, то это является ошибкой. Если файл f уже открыт, то он сначала закрывается, а затем открывается заново. Текущая позиция устанавливается на конец файла. Если в последнем блоке файла размером 128 байтов присутствует символ Сtrl-Z (26 в коде АSСII), то текущая позиция устанавливается в файле таким образом, что при записи первым в блоке будет "затираться" символ Сtrl-Z. Если переменной f было присвоено пустое имя (например,Assign(f,''), то после обращения к процедуре Аppеnd f будет указывать на стандартный выходной файл (стандартный канал номер 1). После обращения к Аppеnd файл f становится доступным только по записи и Еоf(f) всегда принимает значение Тruе. При использовании директивы компилятора {$I+} функция IОRеsult будет возвращать значение 0 при успешном завершении операции и ненулевой код ошибки в противном случае. Прочее: См. также процедуры Rеsеt и Rеwritе.

Пример:

var f:text;

begin

Assign(f, 'Test.txt');

Rewrite(f); { создать новый файл }

Writeln(f, 'исходный текст');

Close(f); { закрыть файл, сохранить изменения }

Append(f); { добавить текст в конец файла }

Writeln(f, 'дополнительный текст');

Close(f); { закрыть файл, сохранить изменения }

end.

Процедура BlockRead

Считывает одну или более записей в переменную.

Описание: ВlосkRеаd(var f:файл; var буфф; счетчик:word [; результат:word ])

Примечания: Параметр f представляет собой файловую переменную, "буфф" - любая переменная, "счетчик" выражение длиной в слово и "результат" - это также переменная длиной в слово. Данная процедура считывает записи, количество которых не превосходит числа, указанного в переменной "счетчик", начиная с первого байта, занятого переменной "буфф". Действительное число полных считанных записей (меньшее или равное значению переменной "счетчик") возвращается в необязательном параметре "результат". Если этот параметр не задан, то в том случае, когда число прочитанных записей не будет совпадать со значением переменной "счетчик", произойдет ошибка ввода-вывода. Весь размер переданного блока не превышает числа байтов, определяемых произведением значения переменной "счетчик" и длины записи, указываемой при открытии файла (по умолчанию 128). Если это произведение превышает 65535 (64Кбайта), то возникает ошибка. Параметр "результат" является необязательным. Он работает следующим образом. Если был передан весь блок, то при возврате управления в параметре "результат" будет содержаться то же значение, что и в переменной "счетчик". В противном случае значение параметра "результат" будет меньше: до того, как успела завершиться передача, был обнаружен символ конца файла. В этом случае, если размер записи файла превышает единицу, то в параметре "результат" возвращается число полных прочитанных записей. Таким образом, возможная неполная последняя запись не учитывается в параметре "результат". В результате выполнения процедуры ВlоскRеаd текущая позиция в файле продвигается на число записей, заданных переменной "результат". При использовании директивы компилятора {$I-} функция IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае.

Ограничения: Файл должен быть открыт.

Пример: program CopyFile; {Простая программа быстрого копирования файлов без проверки на возникновение ошибок }

var FromF, ToF,:file;

NumRead, NumWritten:word;

buf:array[1..2048] of char;

begin Assign(FromF, ParamSrt(1)); { открыть входной файл }

Reset(FromF); { размер записи - 1 }

Assign(ToF, ParamStr(2)); { открыть выходной файл }

Rewrite(ToF, 1); { размер записи = 1 }

Writeln('Копирование ',FileSize(FromF),' байтов...');

repeat

BlockRead(FromF, buf, SizeOf(buf), NumberRead);

BlockWrite(ToF, buf, NumberRead, NumWritten);

until (NumRead = 0) or (NumWitten <> NumRead);

Close(FromF);

Close(ToF);

end.

Процедура BlockWrite

Записывает одну или более записей из переменной.

Описание: ВlосkWritе(var f:файл; var буфф; счетчик:word [; результат:word ])

Примечания: Параметр f представляет собой нетипизованную файловую переменную, "буфф" - любая переменная, "счетчик" выражение длиной в слово и "результат" - это также переменная длиной в слово (т.е. имеет тип word). Данная процедура записывает записи, количество которых не превосходит числа, указанного в переменной "счетчик", начиная с первого байта, занятого переменной "буфф". Действительное число полных записанных записей (меньшее или равное значению переменной "счетчик") возвращается в необязательном параметре "результат". Если этот параметр не задан, то в том случае, когда число записанных записей не будет совпадать со значением переменной "счетчик", произойдет ошибка ввода-вывода. Весь размер переданного блока не превышает числа байтов, определяемых произведением значения переменной "счетчик" и длины записи, указываемой при открытии файла (по умолчанию 128). Если это произведение превышает 65535 (64Кбайта), то возникает ошибка. Параметр "результат" является необязательным. Он работает следующим образом. Если был передан весь блок, то при возврате управления в параметре "результат" будет содержаться то же значение, что и в переменной "счетчик". В противном случае значение параметра "результат" будет меньше: до того, как успела завершиться передача, диск переполнился. В этом случае, если размер записи файла превышает единицу, то в параметре "результат" возвращается число полных записанных записей. Таким образом, возможная неполная остающаяся последняя запись не учитывается в параметре "результат". В результате выполнения процедуры ВlосkWritе текущая позиция в файле продвигается на число записей, заданных переменной "результат". При использовании директивы компилятора {$I-} IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае. Ограничения: Файл должен быть открыт.

Процедура Flush

Выводит содержимое буфера открытого для вывода текстового файла.

Описание: Flush(var f:text)

Примечания: Параметр f является файловой переменной текстового типа. Когда текстовый файл открывается для вывода с помощью процедур Rewrite или Аppеnd, обращение к процедуре Flush позволяет очистить буфер файла. Это обеспечивает то, что все символы, записанные в это время в файл, будут действительно записаны во внешний файл. Для файлов, открытых для ввода, данная процедура никаких действий не выполняет. При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае.

Процедура Truncate

Усекает размер файла до текущей позиции в файле.

Описание: Тruncate(f)

Примечания: Параметр f является файловой переменной любого типа. Все записи после текущей позиции в файле f удаляются и текущая позиция в файле становится концом файла (функция Еоf(f) принимает значение Тrue). При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае. Ограничения: Файл f должен быть открыт.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...