Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size
Главная Статьи Таблица строк (StringGrid) StringGrid сохранение и загрузка

StringGrid сохранение и загрузка

Оцените материал
(2 голосов)

StringGrid сохранение и загрузка

Для хранения табличных данных вполне подойдёт обыкновенный текстовый файл. Код будет такой:

//Запись данных в файл.
procedure TForm1.Button1Click(Sender: TObject);
const
  Fn = 'data.txt';
var
  F : TextFile;
  Sg : TStringGrid;
  i, j, Cnt, CntMax : Integer;
begin
  Sg := StringGrid1;
  AssignFile(F, Fn);
  Rewrite(F);
  //Запись сведений о рамерах таблицы.
  Writeln(F, Sg.RowCount);
  Writeln(F, Sg.ColCount);
  Writeln(F, Sg.FixedRows);
  Writeln(F, Sg.FixedCols);
  //Общее количество ячеек в таблице.
  CntMax := Sg.RowCount * Sg.ColCount;
  //Счётчик записанных в файл ячеек.
  Cnt := 0;
  //Построчная запись данных из ячеек таблицы.
  for j := 0 to Sg.ColCount - 1 do
  for i := 0 to Sg.RowCount - 1 do begin
    Write(F, Sg.Cells[j, i]);
    Inc(Cnt);
    if Cnt < CntMax then Writeln(F);
  end;
  CloseFile(F);
end;
 
//Чтение данных из файла.
procedure TForm1.Button2Click(Sender: TObject);
const
  Fn = 'data.txt';
var
  F : TextFile;
  Sg : TStringGrid;
  i, j, Num : Integer;
  S : String;
begin
  Sg := StringGrid1;
  AssignFile(F, Fn);
  Reset(F);
  //Чтение сведений о размерах таблицы.
  //Общее количество строк.
  Readln(F, Num);
  if Num = 0 then begin
    ShowMessage('Неверный формат файла. Действие отменено.');
    CloseFile(F);
    Exit;
  end;
  //Очистка лишних строк. Это действие предусмотрено для устранений
  //последствий бага TStringGrid. - TStringGrid при уменьшении числа
  //строк, может на самом деле их не удалить, а только скрыть.
  //И в дальнейшем, при добавлении новых строк, вместо появления пустых
  //строк могут появиться ранее скрытые строки с прежними данными.
  //Это касается также и столбцов.
  if Num < Sg.RowCount then
    for i := Num - 1 to Sg.RowCount - 1 do
      Sg.Rows[i].Clear
  ;
  Sg.RowCount := Num;
  //Общее количество столбцов.
  Readln(F, Num);
  if Num = 0 then begin
    ShowMessage('Неверный формат файла. Действие отменено.');
    CloseFile(F);
    Exit;
  end;
  //Очистка лишних столбцов.
  if Num < Sg.ColCount then
    for i := Num - 1 to Sg.ColCount - 1 do
      Sg.Cols[i].Clear
  ;
  Sg.ColCount := Num;
  //Количество фиксированных строк и толбцов.
  Readln(F, Num);
  Sg.FixedRows := Num;
  Readln(F, Num);
  Sg.FixedCols := Num;
  //Построчное чтение данных ячеек таблицы.
  for j := 0 to Sg.ColCount - 1 do
  for i := 0 to Sg.RowCount - 1 do begin
    Readln(F, S);
    Sg.Cells[j, i] := S;
  end;
  CloseFile(F);
end;

Авторизация



Счетчики