|
|
Регистрация | << Правила форума >> | 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 Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |