Показать сообщение отдельно
  #7  
Старый 03.06.2012, 12:29
serbius serbius вне форума
Прохожий
 
Регистрация: 23.05.2012
Сообщения: 20
Репутация: 10
По умолчанию

разобрался, изменив алгоритм и больше не используя поиска в массиве.

но, возникла другая проблема, в инете нашел функцию разбивки по заданному символу, типа как в php explode, так вот, 10 тыс слов она обрабатывает за 8-10 сек, а 50+ тыс - вообще отказывается: через минуту говорит, что нет памяти.

Помогите как-то ее оптимизировать, или посоветуйте другое решение

Код:
function TForm1.Explode(separator: String; text: String): TStringList;
var
  ts: TStringList;
  i_pos: Integer;
  text_new: String;
  s_item: String;
begin
  ts := TStringList.Create;
  text_new := text;
  while (text_new <> '') do begin
    i_pos := Pos(separator, text_new);
    if i_pos = 0 then begin
      s_item := text_new;
      text_new := '';
    end
    else begin
      s_item := Copy(text_new, 1, i_pos - 1);
      text_new := Copy(text_new, i_pos + Length(separator), Length(text_new) - i_pos);
    end;
    ts.Add(s_item);
  end;
  Result := ts;
end;
Ответить с цитированием