В первой части статье по сохранение информации из TStringGrid в файл и считывание из файла в TStringGrid мы узнали как можно в типизированные фалах хранить информацию. Теперь давайте посмотрим как можно сохранить информацию в текстовый файл и считать из него данную информацию в TStringGrid. Тут может для кого-то и посложнее будет по сравнению с первым вариантом, так как в текстовом файле мы будет сохранять построчно информацию и наши данные необходимо разделить как-то, я использовал пробелы, но это менее быстрый вариант поэтому каждую ячейку записываем в каждую строку нашего текстового файла. Мы поступим так, в первую строку нашего текстового файла мы запишем количество строк и столбцов нашего TStringGrid, разделив их знаком «+«. Далее в цикле в каждую строку мы будем записывать значение каждой ячейки. При считывании информации, мы сразу считаем количество строк и столбцов, пропарсим наши данные (чтобы получить количество строк и столбцов, это мы умеем уже, правда?). И просто организуем цикл, как считаем количество столбцов и строк и будем считывать каждую строку и отображать их в TStringGrid.
На форме у меня
- TStringGrid
- TButton — 2 шт (для сохранения и считывания)
Далее на сохранение я пишу следующий код
procedure TForm1.Button1Click(Sender: TObject);
var
F:TextFile;
value:WideString;
i,j:integer;
begin
try
AssignFile(F,'test.txt');
Rewrite(F);
value:='';
value:=IntToStr(StringGrid1.RowCount)+'+'+IntToStr(StringGrid1.ColCount);
Write(F,value);
for i:=0 to StringGrid1.RowCount-1 do
begin
value:='';
for j:=0 to StringGrid1.ColCount-1 do
begin
value:=StringGrid1.Cells[j,i];
WriteLn(F,value);
end;
end;
CloseFile(F);
except
on e:Exception do
end;
end;
Думаю тут все понятно, создаем файл — test.txt (функции и процедуры по созданию файлов я рассказывал), далее получаем количество строк и столбцов и разделяем их знаком «+» записываем в первую строку, а далее в цикле в каждую строку записываем наше значение. Ничего тут сложного нету как видите, теперь считываем из этого файла, на событие OnClick кнопки «Открыть» я написал следующий код
procedure TForm1.Button2Click(Sender: TObject);
var
ar_value:array[1..100] of string;
i,j,n,m,k,l:integer;
value,value2:WideString;
F:TextFile;
begin
try
k:=0;
AssignFile(F,'test.txt');
Reset(F);
l:=0;
Read(F,value);
value2:=copy(value,1,pos('+',value)-1);
n:=StrToInt(value2);
Delete(value,1,pos('+',value));
m:=StrToInt(value);
for i:=0 to n-1 do
begin
for j:=0 to m-1 do
begin
ReadLn(F,value);
StringGrid1.Cells[j,i]:=value;
end;
end;
CloseFile(F);
except
on e:Exception do
end;
end;
Как видите сперва мы считываем значение из 1-й строки и парсим ее, получаем при это количество столбцов и строк, затем организовываем цикл и в этом цикле считываем значения из файла с помощью ReadLn и записываем в каждую ячейку нашего TStringGrid. Далее я расскажу как сохранить и считать данные TStringGrid, используя при этом файл — ini. А на этом все.