![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
программа выглядит примерно так:
Код:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,UnitGl, ComCtrls, Buttons, ExtCtrls, Grids;
type
TForm4 = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
OpenDialog1: TOpenDialog;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Button5: TButton;
Bevel1: TBevel;
Button6: TButton;
Bevel2: TBevel;
BitBtn1: TBitBtn;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
Work:TMain1;
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
If OpenDialog1.Execute Then
Begin
Work:=TMain1.Create(OpenDialog1.FileName);
End;
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
work.polniispis(StringGrid1);
end;
end.
unit UnitGl;
interface
Uses Dialogs,StdCtrls,SysUtils,grids;
type
TData=record
day:1..31;
month:1..12;
year:Integer;
end;
TOcheredniki=record
fam:String;
name:String;
otch:String;
plosh:Integer;
kol:Byte;
srok:TData;
staj:TData;
end;
TMain=class
protected
NameFile:String;
l:Integer;
D:Array Of TOcheredniki;
public
Constructor Create(UnitFile:String);
Destructor Destroy; override;
Procedure polniispis(StrGr:TStringGrid);
end;
TMain1=class(TMain)
published
Constructor Create(UnitFile:String);
Destructor Destroy; override;
end;
implementation
Constructor TMain.Create(UnitFile:String);
Var f:TextFile;
i:Integer;
s:String;
begin
NameFile:=UnitFile;
AssignFile(f,UnitFile);
Reset(f);
ReadLn(f,l); {Вот здесь переменная l ничего не считывает и получается= 0}
SetLength(d,l);
For i:=1 To l Do
Begin
ReadLn(f,d[i].fam);
ReadLn(f,d[i].name);
ReadLn(f,d[i].otch);
ReadLn(f,d[i].plosh);
ReadLn(f,d[i].kol);
ReadLn(f,d[i].srok.day,d[i].srok.month,d[i].srok.year);
ReadLn(f,d[i].staj.day,d[i].staj.month,d[i].staj.year);
End;
CloseFile(f);
end;
Procedure TMain.polniispis(StrGr:TStringGrid);
var i:Integer;
begin
StrGr.RowCount:=l;
For i:=1 To l Do
end;
Destructor TMain.Destroy;
begin
end;
Constructor TMain1.Create(UnitFile:String);
begin
end;
Destructor TMain1.Destroy;
begin
end;
end.В текстовом файле в самом начале стоит число не равное 0. Помогите плиз, если знаете в чем дело... Aristarh Dark: пользуемся тэгами!!! |
|
#2
|
||||
|
||||
|
Друг, я если честно чайник, может чего не понимаю, но "Reset(f)"-это вроде при записи файла, при чтении используется вроде "rewrite(f)"... еще так и не увидел указа позиции(вроде "seek")... но эти методы я использовал, заменив "f:TextFile" на "f:file of byte", так что извени если не посуществу совет
![]() |
|
#3
|
||||
|
||||
|
Во-первых, зачем использовать TextFile для структурных данных?
Во-вторых, если объявил TextFile, то будь добр и читай/пиши только строковые переменные, а потом их преобразовывай. |
|
#4
|
|||
|
|||
|
Цитата:
Наоборот... Погоди минитут 15 сейчас свой вариант брошу... Ты с классами напутал... ![]() |
|
#5
|
|||
|
|||
|
да пробовал я и строковые переменные, но один фиг получается 0
|
|
#6
|
|||
|
|||
|
Цитата:
Код:
сonstructor TMain.Create(UnitFile:String);
Var f:TextFile;
i:Integer;
s:String;
begin
inherited Create;
NameFile:=UnitFile;
AssignFile(f,UnitFile);
Reset(f);
ReadLn(f,l); {Вот здесь переменная l ничего не считывает и получается= 0}
SetLength(d,l);
For i:=1 To l Do
Begin
ReadLn(f,d[i].fam);
ReadLn(f,d[i].name);
ReadLn(f,d[i].otch);
ReadLn(f,d[i].plosh);
ReadLn(f,d[i].kol);
ReadLn(f,d[i].srok.day,d[i].srok.month,d[i].srok.year);
ReadLn(f,d[i].staj.day,d[i].staj.month,d[i].staj.year);
End;
CloseFile(f);
end;Измени код конструктора... срузу не заметил ... ![]() К стати брось исходник... может если так не пройдёт в нём покапаемся ... хотя если чесно ты перемудрил... ![]() Можно гораздо короче и проще сделать.. Последний раз редактировалось voron_paa, 13.05.2008 в 10:49. |
|
#7
|
|||
|
|||
|
Все равно не помогает, опять ноль выводит... А насчет исходника, то я почти все скинул (самое главное)
|
|
#8
|
||||
|
||||
|
Код:
var f: File of Integer; i: Byte; begin AssignFile(f, '1.txt'); Reset(f); Read(f, i); CloseFile(f); end; Последний раз редактировалось The Shadow, 13.05.2008 в 12:13. |
|
#9
|
|||
|
|||
|
мне нельзя fail of integer, там еще есть и текстовые значения (дальше)...
|
|
#10
|
||||
|
||||
|
Код:
var f: file of TMyRecord; //В типе-записи нельзя использовать строки String, замени их на PChar или String[макс. длина строки] |
|
#11
|
|||
|
|||
|
плюс к тому же в AssignFile сначала идет переменная, а потом файл
|
|
#12
|
|||
|
|||
|
Цитата:
если можно, то поподробнее, а то есть много вопросов ![]() |
|
#13
|
||||
|
||||
|
Код:
TData=record day:1..31; month:1..12; year:Integer; end; TOcheredniki=record fam:String[50]; name:String[30]; otch:String[50]; plosh:Integer; kol:Byte; srok:TData; staj:TData; end; var Ocheredniki: TOcheredniki; f: file of TOcheredniki; begin AssignFile(f, 'x.txt'); Reset(f); Read(f, Ocheredniki); // CloseFile(f); end; end; |
|
#14
|
|||
|
|||
|
Так тоже не пойдет... Мне надо из файла для начала вытащить только одно число, оно стоит в самом начале. Мне кажется, что ошибка где-то в объявлении конструктора или в
procedure TForm4.Button1Click(Sender: TObject); begin If OpenDialog1.Execute Then Begin Work:=TMain1.Create(OpenDialog1.FileName); End; end; если l присваивать например 10, то дальше программа работает нормально |
|
#15
|
|||
|
|||
|
Если что, то вот ссылка на исходник: http://ifolder.ru/6539624
|