Обмен опытом
Мои программные модули 1) MyStrUnit.pas версия 1.11 (Скачать). Описание: Содержит функции работы со строками (формата ANSI): сравнение строк, сравнение частей строк, поиск подстроки в строке начиная с определённой позиции в прямом или обратном направлении. Почти все написаны на ассемблере (т.е. работают быстрее, чем при написании на паскале). Кроме того, важной особенностью моих функций является отсутствие каких-либо промежуточных преобразований переданных в них строк (например, приведения к одному регистру), причём даже в тех из них, которые работают в режиме независимости от регистра. Вот пример, насколько экономичней выполняются мои функции по сравнению со сходными в дельфи : Моя AnsiCompareTextAsm(s1,s2) = выполняется за 46 процессорных команд. Delphi7 AnsiCompareText(s1,s2) = выполняется за 734 процессорных команды. (При подсчёте в s1 была записана строка из 2-х символов, в s2 - та же строка, но в противоположном регистре). Кроме того, думаю (это я не проверял), что и на сравнение каждого символа у меня затрачивается меньше процессорных команд, так что чем длиннее будет текст в сравниваемых строках, тем значительней будет разница в числе использованных процессорных команд между моими и дельфёвыми функциями. Что касается надёжности кода (отсутствия ошибок), скажу так - тестировал как мог тщательно, кроме того, данный модуль я использовал уже программах в пяти, написанных по работе - пока претензий ко мне от работодателя не было - сортировка, поиск, сравнение - всё прекрасно работает, косяков вроде не наблюдается. Перечень методов, содержащихся в MyStrUnit.pas: AnsiPosTextExAsm - Не чувствительный к регистру поиск подстроки subs в строке s начиная с заданной позиции. AnsiPosTextUpExAsm - Не чувствительный к регистру обратный поиск подстроки subs в строке s начиная с заданной позиции (то же, что и AnsiPosTextExAsm, но ищет подстроку subs от конца строки s к её началу). AnsiPosStrExAsm - Поиск с учётом регистра подстроки subs в строке s начиная с заданной позиции. AnsiPosStrUpExAsm - Обратный поиск (от конца строки s к её началу) с учётом регистра подстроки subs в строке s начиная с заданной позиции. NextStrPosAsm - Быстрый поиск конца строк в многострочном тексте начиная с заданной позиции. AnsiSameTextAsm - Сравнение двух строк на полное совпадение без учёта регистра. AnsiSameStrAsm - Сравнение двух строк на полное совпадение с учётом регистра. AnsiSameCharTextAsm - Сравнение частей двух строк без учёта регистра. Позволяет сравнить не строки целиком, а только их части, заданные начальными позициями в обеих строках и числом сравниваемых символов. Благодаря этому можно избежать копирования подстрок в отдельные строки перед их сравнением - соответственно не тратится время на выделение памяти под эти подстроки, на пересылку данных в них. AnsiSameCharStrAsm - Сравнение частей двух строк с учётом регистра. AnsiCompareTextAsm - Сравнение двух строк без учёта регистра. Отличается от AnsiSameTextAsm тем, что сравнивает строки, даже если они не равны по длине, и возвращает результат типа integer, а не Boolean, что позволяет использовать данную функцию в процедурах сортировки строк. AnsiCompareStrAsm - Сравнение двух строк с учётом регистра. Функции, добавленные в версию 1.04 IsItDigitsSAsm - Возвращает True, если строка не пустая и содержит только символы цифр. DigitsNumCharAsm - Возвращает число цифр, содержащееся в указанной позиции строки (т.е. от указанной позиции до первого символа не цифры). ReflectStrAsm - Посимвольно отражает данные в строке (например, если было "12345", станет "54321"). Внимание!! Перед использованием данной процедуры обязательно прочтите инфо к ней в юните. LengthOnTrimRightAsm - Возвратит, какая у строки будет длина, если выполнить для неё TrimRigth. TrimRightAsm - Аналог дельфёвой TrimRight, только это процедура, а не функция, написана она, сказать по правде, не на ассемблере, но базируется на ассемблерной функции LengthOnTrimRightAsm. Функции, добавленные в версию 1.05 ThisStrPosAsm - Возвращает позицию начала строки по позиции любого символа, принадлежащего этой строке в многострочном тексте. FindSymbolPosCSAsm - Зависимый от регистра поиск символа Symb в строке S начиная с заданной позиции. Функции, добавленные в версию 1.06 AnsiUpperCaseAsm - Ассемблерный аналог дельфёвой AnsiUpperCase. AnsiPosTextExAsmEx - Расширенный вариант AnsiPosTextExAsm. Позволяет искать подстроку в тексте от указанной позиции до указанной позиции. Методы, добавленные в версию 1.10 SetBigCaseCahrAsm, SetFirstBigCase - Изменяют соотвественно заданый символ или первый символ стоки на заглавный. TrimRightAsmSp - Удаляет символы пробелов справа, в отличие от Delphi7 TrimRight не создаёт копию строки, а возвращает её саму (не вызывает UniqueString) если пробелов справа не было. LengthOnTrimLeftAsm - Возвратит, какая у строки будет длина, если ей выполнить TrimLeft. TrimLeftAsm, TrimAsm - Выполняют TrimLeft/TrimAsm только если в этом есть необходимость, иначе ничего не делают, т.е. не создают копию строки. TrimDelWSpace - Удаляет пробелы из начала и конца и все сдвоенные и более пробелы внутри строки, если такие есть, заменяя их одиночными. Возвращает True, если строка была изменена. MoveSDataSp - Перемещает заданное число байт данных в строке S из позиции с индексом FromInd в позицию ToInd. Перемещение производится в памяти, поэтому не приводит к вызову UniqueString. MovsSChar - Заменяет символ с указаным индексом в строке на заданный. Делает это прямо в памяти, поэтому не приводит к разделению строк, если одна и та же строка хранится в нескольких переменных (не приводит к вызову UniqueString). ReplaceStrSp - Заменяет в строке S подстроку, находящуюся в промежутке между подстроками Marker, на подстроку sub. Можно заменять одну подстроку с определённым индексом или все маркированные подстроки разом. FindFirstDigitAsm - Ищет символ цифры в строке S. Возвращает позицию первой от начала строки цифры или 0, если цифр в строке нет. FindFirstDigitPosAsm - Ищет символ цифры в строке S начиная с позиции wPos. Возвращает позицию цифры в строке или 0, если не найдено. DigitsNumPosAsm - Возвращает число цифр начиная с позиции wPos в строке S до первого символа не цифры. Функции, добавленные в версию 1.11 ReplaceSymbFor - Заменяет все символы Symb в строке S на символ SymbFor, возвращает число заменённых симоволов или 0, если ничего не заменено. GetThisPosStr - Возвращает из многострочного текста S строку из позиции wPos, смещая wPos на начало следующий строки.
Методы online
Процедура DelNilObjs
Функция
MyExtendedToSTr Function MyExtendedToSTr(const wExt:Extended; const wPrecision:integer = 18; const wDecimals:integer = 9999; Const wSepar:Char = #0):String; |