08.03.2010, 21:13
|
|
Гуру
|
|
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
|
|
Посмотрел я ваш текстовичок.
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.
и DFM
Код:
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
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
|