Delphi XE — более быстрая альтернатива функции System.Pos

Я знаю, что много кода из FastStrings было включено в Delphi XE. Мне нужно обработать несколько тысяч файлов и выполнить некоторую обработку текста. Существует ли «более быстрая» альтернатива подпрограмме System.Pos?


person RBA    schedule 01.10.2012    source источник
comment
RBA: в зависимости от того, что вы ищете. Вы можете искать символ, подстроку или любой массив подстрок. Это дало бы вам разные алгоритмы. Это также может зависеть от того, нужна ли вам позиция или проверка того, что символ (или набор символов) присутствует/отсутствует в строке. Обычный поиск символов — это просто линейное сканирование. Поиск подстроки должен пропускать части строки после неудачного совпадения и, таким образом, получать ускорение (я не помню имен, которым приписывается эта оптимизация, но это довольно очевидная идея)   -  person Arioch 'The    schedule 02.10.2012
comment
По сути, если у вас действительно критическая скорость, вам лучше взглянуть на более широкую картину и подумать, соответствует ли функция Pos вашим потребностям или вы неправильно ее используете.   -  person Arioch 'The    schedule 02.10.2012


Ответы (1)


Да. Функция PosEx взята из FastCode и работает намного быстрее по сравнению с System.Pos. Он находится в модуле StrUtils.

person Linas    schedule 01.10.2012
comment
Если PosEx намного быстрее, чем System.Pos, как вы объясните эту реализацию: Result := System.Pos(SubStr, S, Offset); - person Uwe Raabe; 01.10.2012
comment
@UweRaabe - так они понизили его или изменили System.Pos и сделали PosEx оберткой? У меня нет XE2, чтобы проверить себя. - person Leonardo Herrera; 01.10.2012
comment
@LeonardoHerrera, на самом деле это в XE3 (вы действительно запутаетесь, когда у вас открыто более одной IDE). В XE3 System.Pos взят из FastCode (по крайней мере, для 32-разрядной версии). - person Uwe Raabe; 01.10.2012