Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение и загрузка StringGrid в файл


Никита2013 ©   (2013-09-15 01:23:00) 

Здравствуйте! Нашел в сети интересную реализацию сохранения/загрузки ListView в файл:
Procedure SaveListView(S: String; ListView: TListView);
Const Delimiter = '|';
Var ff: TextFile;
   t: Integer;
begin
AssignFile(ff, S);
ReWrite(ff);
try
 With ListView Do For t:=0 to Items.Count - 1 Do
  WriteLn(ff,StringReplace(Items[t].Caption + Delimiter + Items.Item[t].SubItems.Text,#13#10,Delimiter,[rfReplaceAll]));
finally
 CloseFile(ff);
end;
end;

procedure LoadListViewToFile(ListView: TListView; S: String);
Const Delimiter = '|';
Var
ff: TextFile;
Begin
ListView.Clear;
AssignFile(ff, S);
Reset(ff);
try
 While not Eof(ff) Do
  Begin
   ReadLn(ff,S);
   With ListView.Items.Add Do
    Begin
     Caption:=Copy(S,1,Pos(Delimiter,S)-1);
     System.Delete(S,1,Pos(Delimiter,S));
     S:=StringReplace(S,Delimiter,#13#10,[rfReplaceAll]);
     SubItems.Text:=S;
    End;
  End;
finally
 CloseFile(ff);
end;
End;  
Решил приспособить  для грида. Сохранения осилил, а вот на загрузке немного застрял:
procedure LoadToGrid(s:String);{S:filename}
Const Delimiter = '|';
Var
ff: TextFile;
i,n:Integer;
Begin
{for I := 0 to Form1.StringGrid1.RowCount - 1 do Form1.StringGrid1.Rows[I].Clear;}
AssignFile(ff, S);
Reset(ff); n:=0;
try
 While not Eof(ff) Do
   Begin
   ReadLn(ff,S);
   Form1.StringGrid1.Cells[0,n]:=Copy(S,1,Pos(Delimiter,S)-1);
   System.Delete(S,1,Pos(Delimiter,S));
   S:=StringReplace(S,Delimiter,#13#10,[rfReplaceAll]);
   Form1.StringGrid1.Cells[1,n]:=S;
   n:=n+1;
   End;
finally
 CloseFile(ff);
end;
End;
Содержимое файл загружается, первая колонка нормально,а во вторую впихивает все данные из второй плюс из других колонок тоже. Как разделить непонятно :( Буду благодарен за советы!


Никита2013   (2013-09-15 12:40:00) [1]

Сделал так:
While not Eof(ff) Do
   Begin
   ReadLn(ff,S);
   StringGrid1.Cells[0,n]:=Copy(S,1,Pos(Delimiter,S)-1);
   for i:=1 to 16 do {по кол.столбцов}
    begin
    System.Delete(S,1,Pos(Delimiter,S));
    StringGrid1.Cells[i,n]:=Copy(S,1,Pos(Delimiter,S)-1);
    end;
   n:=n+1;
   End;
Вроде пашет... :)


Германн   (2013-09-15 12:29:00) [2]


> Delphi XE5, приложение для Андроид

Значит не судьба получить на FMX простой код. Придется вытаскивать значения для всех столбцов поодиночке.


Никита2013   (2013-09-15 10:20:00) [3]

На строке StringGrid1.Rows[n].Text:=StringReplace(S,Delimiter,#13#10,[rfReplaceAll]);
выдает такую ошибку:
Undeclared identifier: 'Rows'
(Delphi XE5, приложение для Андроид)


Никита2013   (2013-09-15 09:52:00) [4]

Спасибо большое! Буду пробовать... :-)


Германн   (2013-09-15 03:15:00) [5]

while not Eof(ff) do begin
 ReadLn(ff,S);
 StringGrid1.Rows[n].Text:=StringReplace(S,Delimiter,#13#10,[rfReplaceAll]);
 n:=n+1;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо