Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.07.13;
Скачать: CL | DM;

Вниз

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

 
Никита2013   (2013-09-15 01:23) [0]

Здравствуйте! Нашел в сети интересную реализацию сохранения/загрузки 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-09-15 03:15) [1]

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


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

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


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

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


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


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

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


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

Сделал так:
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;
Вроде пашет... :)



Страницы: 1 вся ветка

Текущий архив: 2014.07.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
15-1387657802
Юрий
2013-12-22 00:30
2014.07.13
С днем рождения ! 22 декабря 2013 воскресенье


2-1378507407
BBC
2013-09-07 02:43
2014.07.13
Правильно ли определять так временную папку?


2-1378965082
Коля
2013-09-12 09:51
2014.07.13
Создание Tmemo


2-1378693783
Wadimka
2013-09-09 06:29
2014.07.13
Как сэмулировать нажатие кнопки _ (нижние подчеркивание)


2-1378798421
Сергей
2013-09-10 11:33
2014.07.13
Бит бтн glyth