запись и чтение из файла объектов в память программы pascal
Заранее спасибо ответ!) нужно сделать задание по критериям, типо "база данных" клиентов, а именно - контейнер с объектами "клиент", у которых содержится контейнер с объектами "различные действия". объекты "клиент" связаны простой структурой массив. А объекты "различные действия" связаны двусвязным, двунаправленным списком. Объект "клиент" содержит данные типа string(просто имя). Объект "различные действия" содержит данные типа integer и DataTime. Функционал: ввод/вывод через консоль и самое главное - через текстовый файл... Запись в текстовый файл понятно как сделать. А вот как сделать чтение из файла и сохранения в памяти программы??? как сделать, чтоб при считывании из текст. файла - переменные разделялись на string,int и - DateTime? И самое главное, как сделать разделения на объекты?... какие "инструменты "(функции, процедуры) для этого использовать? и вопрос по кольцевой очереди, правильно ли реализованы - добавление/удаление? вывод не работает, если удалить один из объектов из массива...
unit TISBIBANK; //контейнер класса клиентов
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,Clients; //подключение класса клиентов
Type TBank=class
const Arr_Size = 50;
private
Clients:array [1..Arr_Size] of TClient; //объ.дин. массива ссылок на клиентов
Last:integer;
First:integer;
CountClient:integer; //счетчик клиентов
NameBank:string; //название банка
public
constructor Create(a_NameBank:string); //создание контейнера "банк"
function AddClient (a_NameClient:string;a_DateOperation:string;a_AmountOperation:integer):boolean; //добавление клиента
function DeleteClient :boolean; //удаление клиента
function SearchClient(a_nameClient:string):TClient; //поиск клиента по его имени/фамилии
function OutputFullInfo:string; //вывод всей информации по клиентам
function OutputInTXT(nameTXT:string):boolean; //запись в txt
function InputInTXT(nameTXT:string):boolean; //запись из txt
end;
implementation
constructor TBank.Create (a_NameBank:string);
begin
if a_NameBank <> '' then
begin
NameBank:=a_NameBank; //имя банка
Last:=0;
First:=0;
CountClient:=0;
end;end;
//----------------------------------------------------------------------
function TBank.AddClient(a_NameClient:string;a_DateOperation:string;a_AmountOperation:integer):boolean;
begin
if (CountClient=Arr_Size) then
writeln ('Is Filled!')
else
Clients[Last]:=TClient.Create(a_NameClient,a_DateOperation,a_AmountOperation); //добавление в конец колц.очереди
Last:=Last+1; //ув.счетчика
CountClient:=CountClient+1; //ув.счетчика клиентов
if (Last>50) then
Last:=0;
end;
//----------------------------------------------------------------------
function TBank.DeleteClient :boolean;
begin
if (CountClient=0) then
writeln ('Is Empaty!')
else
Clients[First]:=NIL;
First:=First+1; //ув.счетчика
CountClient:=CountClient-1;
if (First>50) then
First:=0;
end;
//----------------------------------------------------------------------
function TBank.SearchClient(a_nameClient:string):TClient;
var i:integer;
begin //цикл по массиву клиентов
for i:= 0 to (CountClient-1) do
begin
if (Clients[i].GetNameClient = a_nameClient) then //проверка на совпадении фамилии
result:=Clients[i] //возвращаем ссылку на студента
else
result:=nil; //не нашли
end;end;
//----------------------------------------------------------------------
function TBank.OutputFullInfo:string;
var i:integer;
begin
result:='';
/// for i:= Last downto First do //цикл по массиву клиентов
for i:= First to (CountClient-1) do
begin
result:=result+Clients[i].GetNameClient+#10#13+Clients[i].FullInfoOperationsWithDeposits+#10#13;
end;end; //возврат фамилии + всей информации по вкладам
//----------------------------------------------------------------------
function TBank.OutputInTXT(nameTXT:string):boolean;
var info:string;
i:integer;
txt:file of TClient ;
begin
if (CountClient=0) then result:=false
else
begin
info:=OutputFullInfo; //запись в переменную info всей информации по клиентам
assign(txt,nameTXT);
rewrite (txt);
For i:=0 to CountClient-1 do
write(txt,Clients[i]); //запись этой информации в текст
close(txt);
result:=true;
end;end;
function TBank.InputInTXT(nameTXT:string):boolean;
var info:string;
txt:file of TClient ;
i,g,code:integer;
var d:TClient;
begin
assign(txt,nameTXT);
if not fileexists(nameTXT) then
result:=false
else
begin
reset(txt);
For i:=0 to high(Clients) do begin
read(txt,Clients[i]);
d:=Clients[i];
Clients[Last]:=d; //добавление в конец колц.очереди
Last:=Last+1; //ув.счетчика
CountClient:=CountClient+1;
end;
Close(txt);
end;result:=true; end;