Помогите, работаю с файлом в Дельфи впервые!!!!!!

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
riloko
Сообщения: 2
Зарегистрирован: 29 ноя 2014, 21:57

29 ноя 2014, 22:10

в общем суть в том, что я имею 3 Unit'а . Unit1, в котором находится основное тело программы, кнопки и тд.. Unit_def - описание всех переменных. Unit_operation - в нем находятся все процедуры, ниже коды каждого из юнитов:

Код: Выделить всё

Unit1--------------------------------------------------------------------------------------------------------

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit_Operation, Unit_Def;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Edit4: TEdit;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    Edit6: TEdit;
    Label6: TLabel;
    Edit7: TEdit;
    Label7: TLabel;
    Edit8: TEdit;
    Label8: TLabel;
    Edit9: TEdit;
    Label9: TLabel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Clearall;
begin
Form1.edit1.clear;
Form1.edit2.clear;
Form1.edit3.clear;
Form1.edit4.clear;
Form1.edit5.clear;
Form1.edit6.clear;
Form1.edit7.clear;
Form1.edit8.clear;
Form1.edit9.clear;
Form1.memo1.clear;
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
Clearall;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
    i : integer;
begin
Memo1.Clear;
for i:=0 to Length(sport)-1 do
begin
Memo1.Lines.Add('Имя: '+ Sport[i].Im );
Memo1.Lines.Add('Фамилия: : ' + Sport[i].f);
Memo1.Lines.Add('Гражданство: ' + sport[i].g);
Memo1.Lines.Add('Вид спорта: ' + sport[i].s);
Memo1.Lines.Add('Клуб: ' + sport[i].k);
Memo1.Lines.Add('рост спортсмена: ' + IntToStr(sport[i].r));
Memo1.Lines.Add('вес спротсмена: ' + IntToStr(sport[i].v));
Memo1.Lines.Add('дата рекорда: ' + sport[i].d);
Memo1.Lines.Add('призовое место: ' + IntToStr(sport[i].p));
Memo1.Lines.Add('')
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  i:integer;
begin
  i:=length(sport);
  setlength(sport,i+1);
    begin
      sport[i].im:=Edit1.text;
      sport[i].f:=Edit2.text;
      sport[i].g:=Edit3.text;
      sport[i].s:=Edit4.text;
      sport[i].k:=Edit5.text;
      sport[i].r:=StrToInt(Edit6.text);
      sport[i].v:=StrToInt(Edit7.text);
      sport[i].d:=Edit8.text;
      sport[i].p:=StrToInt(Edit9.text);
    end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  ClearAll;
  ReadFromFile(sport, opendialog1.filename);
  Memo1.Lines.Add('Данные получены');
  end;
   end;



end.
-----------------------------------------------------------------------------------------------------

Unit_def-------------------------------------------------------------------------------------------

unit Unit_Def;

interface
type
  sportsman=record
  im: string[20];
  f: string[20];
  g: string[20];
  s: string[20];
  k: string[20];
  r:integer;
  v:integer;
  d: string[20];
  p:integer;
  end;

  tsport=array of sportsman;

var
  sport:tsport;

implementation

end.
-------------------------------------------------------------------------------------------------------------

Unit_operation--------------------------------------------------------------------------------------------

unit Unit_Operation;

interface

 uses
 Unit_Def;

procedure ReadFromFile(var sport:tsport; Name:String);

implementation



procedure ReadFromFile(var sport:tsport; name:string);
 var
 Filename:file of sportsman;
 //i:byte;
begin
 SetLength(sport, 0);
 Assignfile(Filename,name);
 Reset(Filename);
 while not(eof(filename)) do
 begin
 //for i:= 0 to filesize(Filename)-1 do
 //begin
  SetLength(sport, Length(sport)+1);
  read(Filename, sport[High(sport)]);
 //end;
 end;
 CloseFile(Filename);
End;





end.

Помогите с процедурой чтения файла, выводится ересь, в чем ошибка не пойму, а раньше вообще не работала.....
riloko
Сообщения: 2
Зарегистрирован: 29 ноя 2014, 21:57

29 ноя 2014, 22:13

Может где в другом месте накосячил.....
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

18 апр 2015, 16:07

Поясни как ты вызываешь процедуру procedure ReadFromFile(var sport:tsport; name:string); ???

Все что у тебя в скобках указано - это переменные в которые процедура должна вернуть данные...

procedure ReadFromFile(sport:tsport; name:string); - это переменные которые передаются в процедуру... разницу ощущаем?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

18 апр 2015, 16:08

Скорее всего ты видишь абру-кадабру - потомучто компилятор создал переменные, но в них ничего не хранится, а точнее все что было в оперативной памяти в данном адресном пространстве определенную под переменную...это ты и видишь)))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

18 апр 2015, 16:20

Наглядный пример работы такой процедуры:

Код: Выделить всё

Procedure sumnum(x,y:integer; var res:integer);
begin
 res:=x+y;
end;

procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
reslt:integer;
begin
sumnum(rn1.IntValue,rn2.IntValue,reslt);
rn3.IntValue:=reslt;
end;
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить