Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2014, 08:56   #11
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

файл загрузить сразу в tstringlist
в датасете locate ом искать
eval вне форума Ответить с цитированием
Старый 04.03.2014, 12:30   #12
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

DisableControls/EnableControls - 1 раз за все циклы
т.е.
Код:
procedure TForm2.Button2Click(Sender: TObject);
begin
DisableControls
try
....
finally
  EnableControls;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 04.03.2014, 12:59   #13
Alexbmgn
Пользователь
 
Регистрация: 08.01.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
DisableControls/EnableControls - 1 раз за все циклы
т.е.
Код:
procedure TForm2.Button2Click(Sender: TObject);
begin
DisableControls
try
....
finally
  EnableControls;
end;
Ну вот вроде как за пределы циклов вынес эти шаги.. незнаю чего еще и сделать для скорости
Код:
procedure TForm2.Button2Click(Sender: TObject);
Var f:TextFile;
st,st2:String;
st1,i:integer;
sl1:string;
List:tstringlist;

begin
progressbar1.Show;
list:=TStringList.Create;
List.LoadFromFile('C:\1.txt');

 datasource1.enabled:=false;
 DBGrid1.DataSource.DataSet.DisableControls;
  
   for i:=1 to List.Count - 1 do
   begin
   ProgressBar1.StepIt;
   DBGrid1.DataSource.DataSet.First;

     While not DBGrid1.DataSource.DataSet.Eof do
       begin
       with dBGrid1.DataSource.DataSet do
       sl1:=fieldbyname('family').AsString+' '+fieldbyname('name').AsString+' '+fieldbyname('otch').AsString;
       st1:=pos(sl1,list[i]);
         if st1>0 then
           begin
           st2:=copy(list[i],st1,length(sl1));
           memo1.lines.add(st2);
           end;
         DBGrid1.DataSource.DataSet.next;
        end;

   end;

DBGrid1.DataSource.DataSet.First;
datasource1.enabled:=true;
DBGrid1.DataSource.DataSet.enableControls;
end;
Т.е я загрузил как было посоветовано файл в Stringlist, а как использовать метод Locate Dataset-a ? ведь тут поиск не в базе а взятых данных из базы в StringList-e..

Последний раз редактировалось Alexbmgn; 04.03.2014 в 13:03.
Alexbmgn вне форума Ответить с цитированием
Старый 04.03.2014, 14:32   #14
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

Цитата:
Ну вот вроде как за пределы циклов вынес эти шаги.. незнаю чего еще и сделать для скорости
1. шире использовать локальные переменные для хранения промежуточных данных
Код:
var
 ds: TDataSet;
 fam, nam, otch: TField; 
 teststr: string;

 List.LoadFromFile('C:\1.txt');
// это вычисления которые нам достаточно выполнять только один раз 
 ds:=DBGrid1.DataSource.DataSet; 
 fam:=ds.fieldbyname('family');
 nam:=ds.fieldbyname('name');
 otch:=ds:=fieldbyname('otch');
// 
 datasource1.enabled:=false;
 ds.DisableControls;
  
   for i:=1 to List.Count - 1 do
   begin
   ProgressBar1.StepIt;
   teststr:=list[i];
   ds.First;

     While not ds.Eof do
     begin
       sl1:=fam.AsString+' '+nm.AsString+' '+otch.AsString;
       st1:=pos(sl1, teststr);
       if st1>0 then
       begin
         st2:=copy(teststr, st1,length(sl1));
         memo1.lines.add(st2);
       end;
       ds.next;
     end;

   end;
2. переставить местами циклы
было: один пробег (цикл) по StringList и много раз по DataSet
сделать: один раз пробежать по DataSet и многократно пробегать по StringList
Код:
ds.First;
datasource1.enabled:=true;
ds.enableControls;

while not ds.Eof do begin
  sl1:=fam.AsString+' '+nm.AsString+' '+otch.AsString;
  
  for j:=0 to list.count-1 do begin
    teststr:=list[i];
    st1:=pos(sl1, teststr);
    if st1>0 then begin
      st2:=copy(teststr, st1,length(sl1));
      memo1.lines.add(st2);
    end; 
  end;

  ds.next;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADO Delphi и Dataset KoliyR БД в Delphi 6 28.01.2012 20:40
Строку из одного DataSet в другой DataSet Abbath1349 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 22.05.2011 19:26
Из DataSet работающего по циклу в DataSet maroder22 БД в Delphi 1 05.09.2010 23:22
Delphi 7. Ошибка "ADODataSet1: Cannot perform this operation on a closed dataset" Vind Помощь студентам 6 20.04.2009 22:47