Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2015, 16:21   #1
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию Ввести из текстового файла данные для массива структур, записать их в типизированный файл

Код:
type
    TStudent=record
    FIO:string[235];//Поле Ф.И.О.
    Ngrup:Integer;//Поле номера группы
    yspev:array[1..5] of Word;//поле массива успеваемости
    sball:Extended;//поле среднего балла
    end;

    
    var
      Fz:file of Tstudent;//Файл типа запись
      Ft:Textfile;//Текстовый файл
      Stud:array[1..100] of Tstudent;//массив записей
      nzap:Integer;//номер записи
      FileNameZ,FileNameT:string;//имя файла


var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Edit6.Text:='';
Edit7.Text:='';
Memo1.Clear;
Button1.Hide;//Сделать невидимой кнопку "Ввести запись"
nzap:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);//Ввести новую запись
begin
 nzap:=nzap+1;
 with stud[nzap] do begin
   FIO:=Edit1.Text;
   Ngrup:=StrToInt(Edit2.Text);
   yspev[1]:=StrToInt(Edit3.Text);
   yspev[2]:=StrToInt(Edit4.Text);
   yspev[3]:=StrToInt(Edit5.Text);
   yspev[4]:=StrToInt(Edit6.Text);
   yspev[5]:=StrToInt(Edit7.Text);
   sball:=(yspev[1]+yspev[2]+yspev[3]+yspev[4]+yspev[5])/5;
   Memo1.Lines.Add(IntToStr(Ngrup)+' '+fio+' '+IntToStr(yspev[1])+' '+IntToStr(yspev[2])+' '+IntToStr(yspev[3])+' '+IntToStr(yspev[4])+' '+IntToStr(yspev[5]));
   end;
   write(fz,Stud[nzap]); //Запись в файл
   Edit1.Text:='';
   Edit2.Text:='';
   Edit3.Text:='';
   Edit4.Text:='';
   Edit5.Text:='';
   Edit6.Text:='';
   Edit7.Text:='';
end;

procedure TForm1.Button2Click(Sender: TObject);//Создание нового файла записей
begin
 OpenDialog1.Title:='Создать новый файл';//Изменение заголовка окна диалога
 if OpenDialog1.Execute then //Выполнение стандартного диалога выбора имени файла
 begin
   FileNameZ:=OpenDialog1.FileName;//Возвращение имени дискового файла
   AssignFile(Fz,FileNameZ);//Связывание файловой переменной Fz с именем файла
   Rewrite(Fz);//Создание нового файла
end;
Button1.Show;//Сделать видимой кнопку "Ввести запись"
end;

procedure TForm1.Button3Click(Sender: TObject);//Открыть существующий файл
begin
  if OpenDialog1.Execute then  //Выполнение стандартного диалога выбора имени файла
begin
  FileNameZ:=OpenDialog1.FileName;//Возвращение имени дискового файла
  AssignFile(Fz,FileNameZ);//Связывание файловой переменной Fz с именем файла
  Reset(Fz);//Открытие существующего файла
  while not Eof(Fz) do begin
  nzap:=nzap+1;
  read(Fz,stud[nzap]);//Чтение записи из файла
with stud[nzap] do
if (yspev[1]+yspev[2]+yspev[3]+yspev[4]+yspev[5])/5 > 4 then
Memo1.Lines.Add(IntToStr(Ngrup)+' '+fio+' '+ IntToStr(yspev[1]) +' '+ IntToStr(yspev[2]) +' '+ IntToStr(yspev[3]) +' '+ IntToStr(yspev[4]) +' '+ IntToStr(yspev[5]) );
if Memo1.Lines.Count = 0 then Memo1.Lines.Add('Нет таких студентов, у которых средний балл > 4');
end;
Button1.Show;//Сделать видимой кнопку "Ввести запись"
end;
end;

procedure TForm1.Button5Click(Sender: TObject);//Сохранение результатов сортировки в текстовом файле
var i:Word;
begin
if SaveDialog1.Execute then //Выполнение стандартного диалога выбора имени файла
begin
  FileNameT:=SaveDialog1.FileName; //Возвращение имени дискового файла
  AssignFile(Ft,FileNameT); //Связывание файловой переменной Ft с именем файла
  Rewrite(Ft); //Открытие нового текстового файла
end;
for i:=1 to nzap do
with stud[i] do Writeln(Ft,i:4,'.' ,Ngrup, fio,sball:8:2); //Запись в текстовый файл
CloseFile(Ft); //Закрытие текстового файла
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
CloseFile(Fz); //Закрытие файла записей при нажатии на кнопку "Close"
end;

procedure TForm1.Button4Click(Sender: TObject);
var i,j:word;
st:TStudent;
begin
for i:=1 to nzap-1 do //Сортировка массива записей
for j:=i+1 to nzap do
if Stud[i].sball<Stud[j].sball then begin
st:=Stud[i];
Stud[i]:=Stud[j];
Stud[j]:=st;
end;
Memo1.Clear;
for i:=1 to nzap do // Вывод в окно Memo1 отсортированных записей
with stud[i] do
Memo1.Lines.Add(IntToStr(i)+'.' + ' '+IntToStr(Ngrup)+' '+fio+' '+ FloatToStrF (sball,ffFixed,4,2));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(Fz);
end;

end.
Помогите доработать чуток,а именно Ввести из текстового файла данные для массива структур, записать их в типизированный файл,а так все хорошо работает,только я создаю файл в формате .dat,сохраняю в .txt,а надо наоборот или как?



_________
форматируйте код тегами!
Модератор

Последний раз редактировалось Serge_Bliznykov; 25.03.2015 в 16:42.
GalaiAnton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Написать программу записи в файл и чтение из файла элементов массива структур для регистрации автомашин с полями... spike_1 Помощь студентам 1 01.03.2015 08:50
Из текстового файла сохранить данные в типизированный тип pascal009 Паскаль, Turbo Pascal, PascalABC.NET 2 17.10.2014 20:03
Создать любой типизированный файл, ввести в него элементы массива количества 50 элементов, отсортировать массив, вывести в файл vany Паскаль, Turbo Pascal, PascalABC.NET 6 01.04.2014 07:19
Имеется типизированный файл с тридцатью числами. Записать в другой файл числа имеющегося файла в обратном порядке. Валентин77 Общие вопросы C/C++ 8 17.12.2013 22:53