![]() |
|
|
Регистрация | << Правила форума >> | 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, то будь добр и читай/пиши только строковые переменные, а потом их преобразовывай. Хорошо написанная программа не требует документации ICQ 9-184-668. |
#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; Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. Последний раз редактировалось The Shadow, 13.05.2008 в 12:13. |
#9
|
|||
|
|||
![]() мне нельзя fail of integer, там еще есть и текстовые значения (дальше)...
|
#10
|
||||
|
||||
![]() Код:
var f: file of TMyRecord; //В типе-записи нельзя использовать строки String, замени их на PChar или String[макс. длина строки] Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#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; Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#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
|