![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#31
|
||||
|
||||
|
Посмотрел я ваш текстовичок.
1.Редактировать напрямую у вас не выйдет т.к. это не чистая таблица. Файл содержит сначала некий описатель, а уже потом данные в нормальном табличном виде. Поэтому для редактирования вам придется сначала считать данные в промежуточную таблицу, внести необходимые изменения и потом сохранить в том-же формате в текстовый файл. 2.Формировать ручками 104 поля конечно можно, но это не наш путь, а потому вот вам вариантик: Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, DBClient;
type
TForm1 = class(TForm)
dsUnits: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
tblUnits: TClientDataSet;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
OpenDialog: TOpenDialog;
UnitFile: TextFile;
S,F: String;
Data: TStringList;
i,n: Integer;
begin
OpenDialog := TOpenDialog.Create(Self);
try
if not OpenDialog.Execute then Exit;
AssignFile(UnitFile, OpenDialog.FileName);
Reset(UnitFile);
try
ReadLn(UnitFile, S);
Edit1.Text := S;
ReadLn(UnitFile, S);
Edit2.Text := S;
ReadLn(UnitFile, S);
Data := TStringList.Create;
Data.Text := StringReplace(S,#9,#13,[rfReplaceAll]);
for i := 0 to Data.Count - 1
do begin
F := Data.Strings[i];
n := 0;
while tblUnits.FieldDefs.IndexOf(F) >= 0
do begin
Inc(n);
F := Data.Strings[i] + IntToStr(n);
end;
tblUnits.FieldDefs.Add(F,ftString,50,False);
end;
tblUnits.CreateDataSet;
while not Eof(UnitFile)
do begin
ReadLn(UnitFile, S);
Data.Text := StringReplace(S,#9,#13,[rfReplaceAll]);
tblUnits.Append;
for i := 0 to Data.Count - 1
do tblUnits.Fields[i].Value := Data.Strings[i];
tblUnits.Post;
end;
except
ShowMessage('Ошибка чтения данных.');
CloseFile(UnitFile);
end;
finally
Data.Free;
OpenDialog.Free;
end;
end;
end.Код:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 471
ClientWidth = 847
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 8
Top = 39
Width = 831
Height = 424
DataSource = dsUnits
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object Button1: TButton
Left = 8
Top = 8
Width = 75
Height = 25
Caption = 'Load...'
TabOrder = 1
OnClick = Button1Click
end
object Edit1: TEdit
Left = 89
Top = 10
Width = 673
Height = 21
TabOrder = 2
Text = 'Edit1'
end
object Edit2: TEdit
Left = 768
Top = 10
Width = 71
Height = 21
TabOrder = 3
Text = 'Edit2'
end
object dsUnits: TDataSource
DataSet = tblUnits
Left = 184
Top = 88
end
object tblUnits: TClientDataSet
Aggregates = <>
Params = <>
Left = 128
Top = 88
end
end |
|
#32
|
|||
|
|||
|
Спасибо тебе ОГРОМНОЕ.
|
|
#33
|
||||
|
||||
|
Чё-то через чур сложная и большая процедура открытия, ведь данные можно и в StringGrid'e редактировать и сохранять в тех же файлах и тогда не возникнет проблема создавать кучу полей.
Код:
procedure TForm1.LoadFile;
var i,j,c: integer; t,z: string; S: TStringList;
begin
if OpenDialog1.Execute then begin
S:=TStringList.Create;
S.LoadFromFile(OpenDialog1.FileName);
For i:=2 to S.Count-1 do begin
t:=S.Strings[i]; c:=0;
For j:=0 to Length(t) do
if Ord(t[j])<>9 then z:=z+t[j] else begin
StringGrid1.Cells[c,i-2]:=z; c:=c+1; z:='';
end;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
end;
end;
end;Процедура загружает фаил в стринг грид. указать у стрингрида количество колнок 105, так как там 105 полей. Одно условие файлы должны быть именно такой структуры, чтобы таблица начиналась с 3 строки. Осталось только написать процедуру сохранения. Последний раз редактировалось W1ndow, 08.03.2010 в 22:06. |
|
#34
|
||||
|
||||
|
Ну хочется человеку с базой работать, я и предложил решение отталкиваясь от этого. Ваш вариант тоже вполне нормален, пускай теперь автор решает каким путем идти.
|
|
#35
|
|||
|
|||
|
W1ndow
ваш вариант некорректно отображает данные,пробовал все,что можно - ничего не помогает |
|
#36
|
|||
|
|||
|
Вот здесь я описал проблеемы - http://www.delphisources.ru/forum/sh...ad.php?t=11293
|