Лабораторная работа 5

Лабораторная работа №1 Запись в текстовый файл и чтение из текстового файла

Цель работы: Научиться работать с данными, через запись их в текстовый файл и чтение из файла

 

Запись массива в текстовый файл и чтение из текстового файла

Технология работы с файлами в системе Delphi требует определённого порядка действий:

1. Прежде всего файл должен быть открыт. Система следит, чтобы другие приложения не мешали работе с файлом. При этом определяется, в каком режиме открывается файл - для изменения или только считывания информации. После открытия файла в программу возвращается его идентификатор, который будет использоваться для указания на этот файл во всех процедурах обработки.

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

3. Файл закрывается. Теперь он опять доступен другим приложениям без ограничений. Закрытие файла гарантирует, что все внесённые изменения будут сохранены, так как для увеличения скорости работы изменения предварительно сохраняются в специальных буферах операционной системы.

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

   
var F:  File ;

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

Если это текстовый файл, то пишем так:

Var f1: textfile;

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

Var f1: textfile;

S: string;

Для открытия файла нужно указать, где он расположен. Для этого файловая переменная должна быть ассоциирована с нужным файлом, который определяется его адресом. Адрес файла может быть абсолютным, с указанием диска и каталогов ('C:\Мои документы\Мои рисунки\FileName.ini'), или относительным, тогда он создаётся в папке с .exe файлом программы. Для задания относительного адреса достаточно указать имя файла с нужным расширением. Делается это оператором AssignFile : 

   
AssignFile( F, 'C:\Мои документы\Myfiles\FileName.txt');
   
AssignFile( F, 'FileName. txt ');

Теперь файл должен быть открыт.

   Открытие файла оператором
 Rewrite приведёт воссозданию файла заново, т.е. существующий файл будет без предупреждения уничтожен, и на его месте будет создан новый пустой файл заданного типа, готовый к записи данных. Если же файла не было, то он будет создан.
   Открытие файла оператором
 Reset откроет существующий файл к считыванию или записи данных, и его указатель будет установлен на начало файла :
   
Rewrite(F);
   
Reset(F);

Чтение файла производится оператором Read :

   
Read( F, S);

Запись в файл производится оператором
 Write :

   
Write(F, S);

При этом чтение и запись производится с текущей позиции указателя, затем указатель устанавливается на следующую запись. Можно проверить, существует ли нужный файл, оператором
 FileExists :

   if FileExists('FileName.txt)
      
then Read(F, S);

Принудительно установить указатель на нужную запись можно оператором
 Seek(F, N), где N - номер нужной записи, который, как и почти всё в программировании, отсчитывается от нуля:

   
Seek(F, 49); - установка указателя на 50-ю запись.

При последовательном чтении из файла рано или поздно
будет достигнут конец файла, и при дальнейшем чтении произойдёт ошибка. Проверить, не достигнут ли конец файла, можно оператором EOF (аббревиатура End Of File), который равен true, если прочитана последняя запись и указатель находится в конце файла:

   
while (not EOF(F)) do
      
Read(F, S);

   Для текстовых файлов вместо
 Read и Write используются операторы Readln и Writeln, умеющие определять конец строки и записывающие/читающие по столбцам. 
Оператор
 Truncate(F) позволяет стереть все записи файла, начиная от текущей позиции указателя, и до конца файла.

В конце работы с файлом его необходимо закрыть. Это делается оператором
 CloseFile(SaveF) ;

 

 

Для примера приведена программа, которая заполняет рандомно динамический массив, затем записывает его в файл mas.txt по кнопке «Выделить массив»,

По кнопке «Прочитать из файла» программа читает данные из файла mas1.txt, который заранее создан в Блокноте и туда уже записаны элементы массива.

Третья кнопка «Запись из StringGrid» позволяет записать содержимое прямо из StringGrid в файл mas2.txt, не меняя содержимого массива mass.

Не забываем во всех случаях закрывать файлы.

Файлы создаются в той же папке, где находится проект. Если хотите в другую – прописывайте путь файла.

Аналогично можно записывать из Edit в файл любую строковую переменную и выводить в Memo из файла.

 

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

mmj= array of integer;

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

Edit1: TEdit;

Button4: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button4Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

n:integer;

mas:mmj;

Form1: TForm1;

 

implementation

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

f: textfile; //описываем переменную текстового файла

begin

randomize;

n:=strtoint(edit1.Text);

SetLength(mas,n);

Stringgrid1.ColCount:=n+1;

Stringgrid1.Cells[0,0]:='Number';

Stringgrid1.Cells[0,1]:='Mas';

assignfile(f, 'mas.txt'); //ассоциируем переменную f с нужным

файлом

rewrite(f); // создает файл 'mas.txt', если такой был –

переписывает

for i:=0 to n-1 do

begin

Mas[i]:=random(n);

Stringgrid1.Cells[i+1,1]:=inttostr(mas[i]);

write(f,Mas[i] ); // записывает элементы массива в строчку

end;

closefile(f); // закрывает файл

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

finalize(mas);

end;

 

procedure TForm1.Button4Click(Sender: TObject);

var

f1: textfile;

i:integer;

s:string;

begin

AssignFile(f1, 'mas1.txt'); //текстовый файл должен быть уже

создан

Reset(f1); // открывает файл для чтения

s:='';

read(f1,s); // читает содержимое файла в строковую

переменную

for i:=0 to n-1 do

Begin

StringGrid1.Cells[i,1]:=s[i]; //выводит в StringGrid

Mas[i]:=strtoint(s[i+1]); // записывает в массив

end;

Closefile(f1)

end;

 

procedure TForm1.Button2Click(Sender: TObject);

Var

i : integer;

F2 : TextFile;

S : String;

begin

AssignFile(F2, 'mas2.txt');

Rewrite(F2);

For i := 1 to n do

Write(F2,StringGrid1.Cells[i,1]); // Здесь пишем в файл прямо из

StringGrid

CloseFile(F2)

end;

 

end.

 

 

 

Ход работы:

1. Получить у преподавателя номер своего варианта.

2. Внимательно прочитать задачу, понять что от вас нужно.

3. Составить алгоритм, для решения вашей задачи.

4. Написать программу на языке Object Pascfl в среде Delphi, организовав ввод и вывод данных так, чтобы можно было убедиться, что задача действительно решена.

 

Отчет о работе должен содержать скрин-шот, листинг программы. Корректность работы программы показать преподавателю в виде исполняемого файла.

 

Варианты заданий:

Вариант 1

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

Вариант 2

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


Вариант 3

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

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

Вариант 5

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


Вариант 6

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

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

Вариант 8

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


Вариант 9

Составить программу, которая читает элементы массива из файла, в количестве, указанном с клавиатуры. Затем четные и нечетные элементы этого массива записывает в 2 разных файла.


Вариант 10

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

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *