Мне нужно разбить строку на TStringList с подстроками фиксированной длины.Быстрый способ разделить строку на части фиксированной длины в Delphi
В настоящее время я использую:
procedure StrToStringList(ASource: string; AList: TStrings; AFixedLen: Integer);
begin
Assert(Assigned(AList));
while Length(ASource) > AFixedLen do
begin
AList.Add(LeftStr(ASource, AFixedLen));
Delete(ASource, 1, AFixedLen);
end;
AList.Add(ASource);
end;
Это работает, но кажется медленным. Любая лучшая/более быстрая идея?
Отредактировано: Профилирование результатов:
прирост Скорость является весьма впечатляющим. Вот результаты моего (субъективного) профилирования.
Размер данных: 290KB, FixedLen: 100:
- Оригинальный код: 58 мс
- Хеффернэн: 1 мс
- Deltics: 1 мс
Размер данных: 2805KB, FixedLen : 100:
- Оригинальный код: 5803 мс
- Heffernan: 5 мс
- Deltics: 4 мс
Очевидно, что вызов 'Delete' не нужен. –
Это Руд-у, а не Руд-и. Держу пари, вы могли видеть эту разницу? –