1 Востаннє редагувалося Torbins (24.03.2015 12:33:03)

Тема: Робота з типізованим файлом

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button10: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label1: TLabel;
    Label10: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Memo1: TMemo;
    procedure Button10Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Edit7Change(Sender: TObject);
    Procedure RSt;
    Procedure WSt;
  private
    { private declarations }
  public
    { public declarations }
  end;
  type
    TSt = record
      Ng: Word;
      Pib:String[40];
      Oc1, Oc2, Oc3:Byte;
      step:Real;
    end;

var
  Form1: TForm1;
  ST:Tst;
  f:file of Tst;
  Fname:string;

implementation

{$R *.lfm}
{Процедура читання записів}
Procedure TForm1.RSt;
  begin
    with St do
      begin
        Ng:= StrToInt(Edit1.Text);
        Pib:= Edit2.Text;
        Oc1:=StrToInt(Edit3.Text);
        Oc2:=StrToInt(Edit4.Text);
        Oc3:=StrToInt(Edit5.Text);
        Step:=StrToFloat(Edit8.Text);
       end;
   end;
{Процедура запису записів}
Procedure TForm1.WSt;
  begin
    with St do
      begin
        Edit1.Text:=IntToStr(Ng);
        Edit2.Text:=Pib;
        Edit3.Text:=IntToStr(Oc1);
        Edit4.Text:=IntToStr(Oc2);
        Edit5.Text:=IntToStr(Oc3);
        Edit8.Text:=FloatToStr(Step);
      end;
  end;

{ TForm1 }

procedure TForm1.Edit7Change(Sender: TObject);
begin

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  Seek(F,FileSize(F)); //Тута якась помилка фіг знає шо за
RSt;
write(f,St);
Edit1.TExt:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Edit8.Text:='';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  RSt;
Seek(F,FilePos(F)-1);
write(F,St);
end;

procedure TForm1.Button7Click(Sender: TObject);
var
Ls1:TstringList;
n,i,gr:integer;
f1:boolean;
z:real;
begin
Ls1:=TstringList.Create;
Ls1.Sorted:=true;
if Edit6.Text='' then
ShowMessage('Введіть номер групи')
else
  begin
gr:=StrToInt(Edit6.Text);
n:=FileSize(F);
f1:=true; z:=0;
Seek(F,0);
for i:=1 to n do
begin
read(F,St);
if gr=St.Ng then
  begin
    f1:=false;
    z:=z+St.Step;
    Ls1.Add(St.Pib);
  end;
end;
end;
Memo1.Lines.Clear;
Edit9.Text:='';
if f1 then Memo1.Lines.Add('Такої групи немає')
else
  begin
    Memo1.Lines.Add('Список студентів' + inttostr(gr) + ' групи');
    Memo1.Lines.AddStrings(Ls1);
    Edit9.Text:=floattostr(z);
  end;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
CloseFile(F);
close;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  if Edit7.Text='' then
Showmessage('Введіть ім*я файлу')
else
begin
Fname:=Edit7.Text;
if NOT FileExists(Fname) then
Showmessage('Такого файлу не існує')
else
begin
AssignFile(F,Fname);
Reset(F);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Seek(F,0);
Read(F,St);
WSt;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
  if Edit7.Text='' then
Showmessage('Введіть ім*я файлу')
else
begin
Fname:=Edit7.Text;
if NOT FileExists(Fname) then
Showmessage('Такого файлу не існує')
else
begin
AssignFile(F,Fname);
Reset(F);
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Seek(F,FileSize(F)-1);
Read(F,St);
WSt;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if FilePos(F)<FileSize(F) then
begin
Read(F,St);
WSt;
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  n:=FilePos(F)-2;
    if n>=0 then
      begin
        Seek(F,n);
        Read(F,St);
        WSt;
      end;
end;

end.

2

Re: Робота з типізованим файлом

Що саме Вас не влаштовує?
Що цей код має робити?
Ви би самі собі із таким підходом допомагали?

x

3

Re: Робота з типізованим файлом

Seek(F,FileSize(F)); //Тута якась помилка
Чи я щось не ясно написав ?

Chemist-i написав:

Що саме Вас не влаштовує?
Що цей код має робити?
Ви би самі собі із таким підходом допомагали?

4

Re: Робота з типізованим файлом

Так вам тут ніхто не допоможе. Не "якась", а напишіть, яка саме.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: Torbins, koala2

5

Re: Робота з типізованим файлом

ex.jedii написав:

Seek(F,FileSize(F)); //Тута якась помилка
Чи я щось не ясно написав ?

1. Яка помилка, що каже компілятор, чи вже під час виконання?
2. Що код має робити? Яка умова задачи?

x

6

Re: Робота з типізованим файлом

Задана інформація про студентів такої структури: номер
групи; прізвище та ініціали студента; оцінки: математичний аналіз, алгебра,
програмування; стипендія.
Розробити програму, яка дозволяє: а) створити або відкрити існуючий
типізований файл із записів з інформацією про студентів, б) додавати записипро нових студентів у кінець файлу, в) вносити зміни у записи про студентів,
г) переглядати файли студентів, е) вивести за алфавітним порядком список
студентів, заданої групи, і фонд стипендії.


Chemist-i написав:
ex.jedii написав:

Seek(F,FileSize(F)); //Тута якась помилка
Чи я щось не ясно написав ?

1. Яка помилка, що каже компілятор, чи вже під час виконання?
2. Що код має робити? Яка умова задачи?

7

Re: Робота з типізованим файлом

ex.jedii
Ок, а текст помилки? Чи хоча б яка послідовність дій призводить до цієї помилки?

8

Re: Робота з типізованим файлом

коли тиснеш кнопку добавити

http://firepic.org/images/2015-03/23/204f3dsb0icm.png


Torbins написав:

ex.jedii
Ок, а текст помилки? Чи хоча б яка послідовність дій призводить до цієї помилки?

Post's attachments

Screenshot from 2015-03-23 19:37:59.png 32.5 kb, 111 downloads since 2015-03-23 

9

Re: Робота з типізованим файлом

А файл створений, перед тим як в нього щось записувати?

10

Re: Робота з типізованим файлом

Ні, файл повинен створюватися прогою

dm3s написав:

А файл створений, перед тим як в нього щось записувати?

11

Re: Робота з типізованим файлом

На скільки я знаю то файл створюеться и відкриваеться процедурою Rewrite, а такої процедури я не знайшов в програмі.

12 Востаннє редагувалося Chemist-i (23.03.2015 21:53:09)

Re: Робота з типізованим файлом

dm3s написав:

На скільки я знаю то файл створюеться и відкриваеться процедурою Rewrite, а такої процедури я не знайшов в програмі.

Все вірно кажете,
спочатку

AssingFile(F, шлях); //зв'язати F (файлову змінну) із шляхом

потім

Rewrite(F), або Reset(F); //(відповідно створити, чи відкрити той файл)

ще можна

FileMode(режим); //чи читати, чи писати чи ще щось

А потім вже можна робити всякі seek і тому подібні операції.
А в кінці не забути

CloseFile(F); //закрити файл
x
Подякували: leofun01, ex.jedii2