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

Вниз

Загрузка из файла в ListView   Найти похожие ветки 

 
Андреев Саша   (2013-07-08 23:49) [0]

Здравствуйте! Хочу загрузить файл в ListView по возможности побыстрее.
Нагуглил такой способ:
procedure LoadListViewToFile(ListView: TListView; S: String);
// © Song
Const Delimiter = "|";
Var
ff: TextFile;
label 1;
Begin
ListView.Clear;
  {$I-}
  AssignFile(Ff,s);
  Reset(Ff);
  if IOResult<>0 then Goto 1;
  CloseFile(Ff);
  {$I+}
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; {With}
  End; {While}
finally
 CloseFile(ff);
end;
1:{..}
End;  

Для сохранения ListView в файл такая процедура:
Procedure SaveListView(S: String; ListView: TListView);
// © Song
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;

Загрузка списков в 200-300кб уже занимает большое время. Можно
как-то модернизировать процедуру загрузки для ускорения или использовать другой метод? С БД связываться пока неохота, программа
простенький тел.справочник до 500 записей. Возможно кто использует поновее и побыстрее ListView со своими методами Load/Save. Подкиньте ссылку пожалуйста на этот компонент. Спасибо!


 
Германн ©   (2013-07-09 00:02) [1]

TListItems.BeginUpdate
TListItems.EndUpdate


 
Андреев Саша   (2013-07-09 00:35) [2]

>Герман А куда нужно добавить указанные команды?


 
Германн ©   (2013-07-09 01:02) [3]


> куда нужно добавить указанные команды?

Первую перед началом загрузки из файла, вторую после окончания загрузки.


 
Dimka Maslov ©   (2013-07-09 09:26) [4]

Откуда взялись такие атавизмы как {$I-}, AssignFile и проч. Для загрузки текста давно используются списки и потоки (Stream).

procedure TForm1.Button1Click(Sender: TObject);
var
 L: TStringList;
 i: Integer;
begin
 L := TStringList.Create;
 try
   L.LoadFromFile("d:\sh\1-1.txt");
   ListView1.Items.BeginUpdate;
   try
     for i := 0 to L.Count - 1 do
       ListView1.Items.Add.Caption := L[i];
   finally
     ListView1.Items.EndUpdate;
   end;
 finally
   L.Free;
 end;
end;


 
sniknik ©   (2013-07-09 09:51) [5]

Dimka Maslov ©   (09.07.13 09:26) [4]
не учел его "сабитемов" которые через разделитель - "|".

Андреев Саша
лучше бы делал отступами... ИМХО. посмотри как TTreeView сохраняет по SaveToFile и сделай аналогично. гораздо нагляднее если как текст просматривать.

> С БД связываться пока неохота, программа простенький тел.справочник до 500 записей.
зачем тогда усложнять "самопальщиной"? не нужно БД, возьми любой датасет/рекордсет в памяти... автоматом получишь и работу с данными - поиск, фильтры, сортировка.
или не обманывай нас... "неохота", скажи "не знаю, а выбранное кажется проще"  (хотя это ошибка, чтобы на нем сделать нормально ... ).


 
Dimka Maslov ©   (2013-07-09 14:30) [6]


> не учел его "сабитемов" которые через разделитель - "|".


Тогда надо xml использовать и не париться.


 
Андреев Саша   (2013-07-09 18:23) [7]

>Dimka Maslov И как написать аналогичную процедуру загрузки но с потоками? На сколько это поможет быстрее загрузить файл?


 
Германн ©   (2013-07-09 18:48) [8]


> Dimka Maslov ©   (09.07.13 14:30) [6]
> Тогда надо xml использовать и не париться.


Правильно! Пусть Медвесёнок-Порожонок парится с ответами/советами.
:)


 
Dimka Maslov ©   (2013-07-09 18:48) [9]


> Андреев Саша   (09.07.13 18:23) [7]


как-то так, не проверялось, но скорость возрастёт. Я гарантирую это.
var
 F: TFileStream;
 L, L1: TStringList;
 i, j: Integer;
begin
 F := TFileStream.Create("d:\file.txt", fmOpenRead);
 try
   L := TStringList.Create;
   try
     L.LoadFromStream(F);
     L1 := TStringList.Create;
     try
       L1.Delimiter := "|";
       L1.StrictDelimiter := true;
       ListView1.Items.BeginUpdate;
       try
         for i := 0 to L.Count - 1 do begin
           L1.DelimitedText := L[i];
           if L1.Count <> 0 then begin
             with ListView1.Items.Add do begin
               Caption := L1[0];
               for j := 1 to L1.Count - 1 do SubItems.Add(L1[j]);
             end;
           end;
         end;
       finally
         ListView1.Items.EndUpdate;
       end;
     finally
      L1.Free;
     end;
   finally
     L.Free;
   end;
 finally
   F.Free;
 end;
end;


 
Андреев Саша   (2013-07-09 19:11) [10]

Странно, но результаты тестов показали, что обе процедуры загружают один и тот же файл за одинаковое время. Как бы это дело ускорить? :/


 
MBo ©   (2013-07-09 22:01) [11]

использовать ListView в  виртуальном режиме


 
robt5   (2013-07-09 22:02) [12]


> Я гарантирую это.

бгг


 
robt5   (2013-07-09 22:03) [13]


> Откуда взялись такие атавизмы как {$I-}, AssignFile и проч

этот атавизм работает также как и твои "потоки"


 
Андреев Саша   (2013-07-09 23:03) [14]

>MBo Это как?


 
Германн ©   (2013-07-09 23:56) [15]


> Андреев Саша   (09.07.13 23:03) [14]
>
> >MBo Это как?

Читать хелп по TCustomListView.OwnerData


 
RWolf ©   (2013-07-10 00:06) [16]


> robt5   (09.07.13 22:03) [13]
> этот атавизм работает также как и твои "потоки"


не так же.
потоки поддерживают большие файлы, а атавизмы — нет.


 
sniknik ©   (2013-07-10 09:43) [17]

> Это как?
> скажи "не знаю, а выбранное кажется проще"  (хотя это ошибка, чтобы на нем сделать нормально ... ).
учи базы.


 
Dimka Maslov ©   (2013-07-10 11:25) [18]


> этот атавизм работает также как и твои "потоки"


На низком уровне - да, но они оставлены исключительно для целей обратной совместимости. Если они ещё есть, то не значит, что ими надо вовсю пользоваться. Они не быстрее и не медленнее, но с их использованием код становится яснее, проще и понятнее. И проблема автора не столько в скорости чтения и обработки данных, а в непонимании принципов работы компонента TListView.


 
Андреев Саша   (2013-07-10 11:36) [19]

>Dimka Maslov Список он и в Африке список :)


 
Андреев Саша   (2013-07-10 11:47) [20]

>sniknik Какая БД попроще подойдет для ведения тел.справочника до 500 записей(Access, SQL lite, MySQL)?


 
Плохиш ©   (2013-07-10 11:52) [21]


> попроще


> Access


 
Андреев Саша   (2013-07-10 12:02) [22]

>Плохиш Для отображения результатов поиска  в БД Access обязателен DBGrid или можно как-то данные показать юзверю в ListView?


 
Dimka Maslov ©   (2013-07-10 12:28) [23]


> Список он и в Африке список


К сожалению, нет. Списки бывают разные.


 
Андреев Саша   (2013-07-10 13:08) [24]

>Dimka Maslov Зеленые,синие,красные ;)


 
sniknik ©   (2013-07-10 13:15) [25]

> Какая БД попроще подойдет для ведения тел.справочника до 500 записей(Access, SQL lite, MySQL)?
любая
но вообще, для 1 таблички -
> возьми любой датасет/рекордсет в памяти...


 
Плохиш ©   (2013-07-10 13:41) [26]


> Андреев Саша   (10.07.13 12:02) [22]
> >Плохиш Для отображения результатов поиска  в БД Access
> обязателен DBGrid

nein

> или можно как-то данные показать юзверю в ListView?

ja


 
Андреев Саша   (2013-07-10 19:03) [27]

>Плохиш :) ja-ja ther goot volkswagen narkota! ;) Link можно с примером?


 
Dennis I. Komarov ©   (2013-07-11 09:42) [28]

Цель сего творения какова?


 
sniknik ©   (2013-07-11 09:50) [29]

> или можно как-то данные показать юзверю в ListView?
конечно... и как же ты без любимого "тормоза"? вставляй, и тут же пиши на форум -
> Странно, но результаты тестов показали, что обе (три) процедуры загружают один и тот же файл за одинаковое время. Как бы это дело ускорить? :/

может сначала научится? на стандартном? ведь не умеешь с ListView работать, нафига и к базам его тянешь?


 
Плохиш ©   (2013-07-11 12:38) [30]


> Link можно с примером?

Учебник по программированию в среде делфи.



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

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

Наверх




Память: 0.54 MB
Время: 0.007 c
15-1373021652
^-k-^
2013-07-05 14:54
2014.04.20
Книги. Избранное


2-1373707361
Jimmy
2013-07-13 13:22
2014.04.20
Windows Store


15-1382733003
Юрий
2013-10-26 00:30
2014.04.20
С днем рождения ! 26 октября 2013 суббота


2-1372759308
JohnKorsh
2013-07-02 14:01
2014.04.20
"Синхронный" сдвиг Memo.


15-1382717773
Rouse_
2013-10-25 20:16
2014.04.20
Кто с GitHub работает - как там кодировку настроить?