Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Занятие 4. Использование текстовых файлов в качестве нетипизированных.Содержание книги
Поиск на нашем сайте
Рассмотрите пример. Задача. Из текстового файла прочитать находящиеся там символы, заменить их на символы, отличающиеся своими кодами от исходных на определенную величину, меняющуюся от символа к символу (шифрация методом простой одноалфавитной подстановки). Поместить эти символы в новый файл, разместив в нем предварительно число перекодированных символов и таблицу смещений кодов. Program Kodirovka; Const NofCod = 20; {Размер таблицы смещений кодов} Var FirstFile: text; {Исходный файл} SecondFile: file; {Результирующий файл} FirstName, SecondName: string; IOres: byte; {Код результата работы с файлом} NofSymb: LongInt; {Число символов в файле} Codes: Array[1..NofCod] of byte; {Таблица смещений кодов символов} Buffer: Array [1..NofCod] of char; {Буфер для символов} i: word; {Процедура записи в файл с проверкой} Procedure WriteAndControl (Var Buf, Amount: word); Var result: word; {Число переданных символов} Begin blockwrite (SecondFile, Buf, Amount, result); if result <> Amount then begin writeln('Нет места на диске '); Halt; end; End; Begin {Связь с исходным текстовым файлом для чтения} repeat {$I-} write('Имя исходного файла: '); readln(FirstName); assign(FirstFile, FirstName); reset(FirstFile); {$I+} IOres:= IOresult; if IOres <> 0 then writeln('Такого файла нет '); until IOres =0; {Связь с результирующим файлом без типа для записи} repeat {$I-} write('Имя результирующего файла: '); readln(SecondName); assign(SecondFile, FirstName); rewrite(SecondFile, 1); {Размер блока в один байт} {$I+} IOres:= IOresult; if IOres <> 0 then writeln('Неправильное имя файла '); until IOres =0; {Установка счетчика символов и запись его в файл} NofSymb:= 0; WriteAndControl(NofSymb, 4); {Задание таблицы смещений кодов символов, запись ее в файл} Randomize; for i:= 1 to NofCod do Codes[i]:= Random(256); {Перекодировка символов и запись содержимого полных буферов в файл} i:= 0; while not Eof(FirstFile) do begin Inc(NofSymb); Inc(i); if Eoln(FirstFile) then begin Buffer[i]:= Chr((13+Codes[i]) mod 256); if i=NofCod then begin writeAndControl(Buffer, NofCod); i:= 0; end; Inc(i); Buffer[i]:= Chr((10+Codes[i]) mod 256); readln(FirstFile); end; else begin read(FirstFile, Symbol); Buffer[i]:= Chr((Ord(Symbol)+Codes[i]) mod 256); end; if i = NofCod then begin writeAndControl(Buffer, NofCod); i:= 0; end; {Запись в файл завершающей части символов} if i <> 0 then begin writeAndControl(Buffer, i); {Запись числа символов} NofSymb:= FileSize(SecondFile)-NofCod-4; Seek(SecondFile, 0); writeAndControl(NofSymb, 4); {Завершение программы} close(SecondFile); writeln('Конец работы программы '); readln; End. В этой программе в результирующий файл окончательно будут записаны: общее количество перекодированных символов, таблица смещений кодов символов и перекодированные символы. Файл используется как файл без типа с размером блока в 1 байт, который устанавливается процедурой rewrite. Задачи для самостоятельного решения 1. Текстовый файл преобразовать в файл целого типа следующим образом: гласные буквы заменить на число 0, согласные буквы на число 1, а все остальные символы – на число 2. Подсчитать количество согласных букв. Если в текстовом файле согласных не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы. 2. Текстовый файл преобразовать в файл символьного типа, игнорируя символы, не являющиеся буквой. Если в текстовом файле букв не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы. 3 Текстовый файл преобразовать в файл строкового типа, игнорируя пустые строки. В каждой строке файла, являющимся результатом выполнения программы, должно быть одно предложение. Если в текстовом файле предложений не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы. 4. Текстовый файл, содержащий числовую информацию преобразовать в файл целого типа. Каждый элемент типизированного файла должен содержать цифру. В программе используйте способы обработки нетипизированного файла и подпрограммы. 5. Текстовый файл, содержащий числовую и текстовую информацию преобразовать в файл целого и символьного типа. Каждый элемент типизированного файла должен содержать цифру или символ. Если в текстовом файле числовой или текстовой информации не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы. 6. Из текстового файла выделить числовую информацию и поместить ее в файл целого типа. Каждый элемент типизированного файла должен содержать цифру. Если в текстовом файле числовой информации не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы. 7. Создайте текстовый файл, содержащий фамилии, имена и отчества сотрудников некоторого предприятия. Преобразуйте этот текстовый файл в файл комбинированного типа. Каждый элемент типизированного файла должен содержать фамилию, имя и отчество одного сотрудника. В программе используйте способы обработки нетипизированного файла и подпрограммы. 8. Создайте текстовый файл, каждая строка которого содержала бы фамилию, имя, отчество сотрудника некоторого предприятия и его оклад. Преобразуйте этот текстовый файл в файл комбинированного типа. Найдите в полученном файле сотрудника с самым высоким окладом. В программе используйте способы обработки нетипизированного файла и подпрограммы. 9. Создайте текстовый файл, каждая строка которого содержала бы наименование товара некоторого предприятия и его цену. Преобразуйте этот текстовый файл в файл комбинированного типа. Найдите в полученном файле самый дорогой и самый дешевый товар. В программе используйте способы обработки нетипизированного файла и подпрограммы. 10. Познакомившись с содержанием предыдущих задач придумайте свою интересную задачу и решите ее. Занятие 5. Примеры решения творческих задач Рассмотрите решение творческих заданий учащихся. Наберите программы на компьютере и просмотрите их действие. Подумайте, как ребятам удалось придумать и выполнить такие работы. Эти программы помогут Вам определиться с выбором своей творческой работы. Задача № 1. С помощью нетипизированного файла проанализировать файлы с расширением.mp3 в заданном пользователем каталоге и создать текстовый файл, содержащий следующую информацию: название песни, исполнитель, имя файла. Program SedihGetTag; {$I-} Uses Crt; Var f: file; c: char; S: string; i: LongInt; DirInfo: seachrec; Txt: text; Procedure Extract; Begin assign(f, DirInfo.name); reset(f, 1); {размер буфера записи равен 1 байту} l:= FileSize(f); {переменной l присваиваем размер файла в байтах} Seek(f, l-125); {ставим указатель, на 125 символов отступив от конца файла} {вычислил сам, проанализировав файл данного типа} while not Eof(f) do Begin blockread(f, c, 1); {читаем посимвольно} S:= S + c; {формируем строковую переменную, содержащую нужный тэг} end; close(f); writeln(Txt, copy(S, 1, 30)+'-'+copy(S, 31, 30)+'-'+DirInfo.Name); {записываем выделенную информацию в файл)} End; Begin ClrScr; assing(txt,'list.txt'); rewrite(txt); FindFirst('*.mp3', Arhive, DirInfo); while DosError=0 do begin S:= ''; Extract; FindNext(DirInfo); end; close(Txt); End. Задача № 2. С помощью нетипизированного файла проанализировать файлы-архивы (архиватор WinRar) и вывести на экран имена заархивированных файлов. Program LipovcevMaksim; Uses Crt; Var i, pos: integer; f: file; FileName, Ima: string; s: char; Procedure Name(Var s: char); Forward; Procedure Poisk(Var s: char); Begin case Ord(s) of 20: begin blockread(f, s, 1); case Ord(s) of 20: Poisk(s); 48..57: begin blockread(f, f, S, 1); case Ord(S) of 20: Poisk(S); 1..19: Name(S); 21..32: Name(S); end; end; end; end; end; End; Procedure (Name(Var S: char); Var k: integer; Begin k:=0; for i:= 1 to 5 do blockread(f, S, 1); while (S<>'.') and (k<9) do begin blockread(f, S, 1); k:= k+1; ima:= Ima+S; if S='\' then k:= 0; end; if Pos('.', Ima)<>0 then begin for i:= 1 to 3 do begin blockread(f, S, 1); Ima:= Ima+S; end; writeln(Ima); end; Ima:= ''; End; Begin ClrScr; writeln('Введите полное имя архивного файла RAR'); write('->'); readln(FileName); reset(f, 1); writeln('Имена заархивированных файлов:'); while not EOF(f) do begin blockread(f, S, 1); Poisk(S); end; close(f); readKey; End. Задача № 3. С помощью нетипизированного файла преобразовать файл c расширением.BMP следующим образом: разделить рисунок на две части по горизонтали, верхнюю часть поместить на место нижней, разделить её на две части по вертикали и поменять их местами. Примечание. При исследовании файлов с расширением ВМР выяснилось следующее их описание в зависимости от количества употребляемых цветов: 16 цветов - 118 байт, 256 цветов - 1086 байт, 24 бита - 55 байт. Это колисемтво байт влияет на значение переменное Кol в программе. Program BaranovA; Uses Crt; Const n=1234; {установка размера буфера} Kol=118; Var F1, F2: file; Name1, Name2: string; Buf: Array [1..n] of byte; AllSize, PicSize, HalfSize: LongInt; i: integer; Begin write('Имя файла >'); readln(Name1); Name2:= Name1; if Pos('.', Name2) <> 0 then begin Delete(Name2, Pos('.', Name2), Lenth(Name2)-Pos('.', Name2)+1); Name2:= Name2+'.tmp'; assign(F1, Name1); reset(F1, 1); assign(F2, Name2); rewrite(F2, 1); AllSize:= FileSize(F1); {размер всего файла} PicSize:= AllSize-Kol; {размер всего файла без описания} HalfSize:= PicSize div 2; {половина файла} blockread(F1, Buf, Kol); blockwrite(F2, Buf, Kol); seek(F1, Kol+HalfSize-1); for i:= 1 to HalfSize div n do begin blockread(F1, Buf, n); {считываем и записываем из середины файла} blockwrite(F2, Buf, n); End; blockread(F1, Buf, HalfSize mod n); {переписываем оставшиеся байты из не полностью заполненного буфера} blockwrite(F2, Buf, HalfSize mod n); Seek(F1, Kol-1); blockread(F1, Buf, HalfSize mod n); blockwrite(F2, Buf, HalfSize mod n); close(F1); close(F2); end; End. Задание. Выбрав какую-либо категорию файлов, проанализировать их в своей программе, пользуясь возможностями обработки нетипизированного файла, и решить некоторую поставленную Вами задачу. Протестированную программу и листинг покажите учителю для оценки. Приготовьте рабочие программы и оцененные листинги для проверки учителем. Проверьте свои знания по теме, ответив на следующие вопросы: 1. Дайте определение нетипизированному файлу. 2. В чем Вы видите преимущества и недостатки работы с нетипизированными файлами по сравнению с типизированными и текстовыви файлами? 3. Объясните назначение параметров специфических для нетипизированных файлов процедур чтения и записи. 4. Какой вид файлов из рассмотренных выше Вам понравился больше и почему? 5. Объясните назначение процедур Аssign, Сlosе, Eof и их параметров. 6. В чем особенность применения процедуры rewrite и какой дополнительный параметр при работе с нетипизированными файлами она имеет? 7. В чем особенность применения процедуры reset и какой дополнительный параметр при работе с нетипизированными файлами она имеет? 8. Объясните назначение процедур Seek, FileSize, FilePos и их параметров. 9. Объясните назначение процедур rename, Truncate, Еrase и их параметров. 10. Расскажите как Вы работали над творческим заданием.
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 186; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.51.237 (0.01 с.) |