|
|
Регистрация | << Правила форума >> | 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
|