Показать сообщение отдельно
  #31  
Старый 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
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием