:: Visual Foxpro, Foxpro for DOS
Re: ОСТАТОК ОТ ДЕЛЕНИЯ
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Ту же функцию ALPHA и пр. символьные функции, например...
Вот честно, ни разу не потребовалось такой функции - проверять что в строке только латиница... А если мне надо латиница и цифры? Латиница, цифры, точка, подчёркивание и вопросительный знак? И ещё 100500 подобных разновидностей - через LEN(CHRTRAN()) это вполне себе просто и универсально решается. Зечем бы мне нужно было 100500 малоочевидных функций, пусть и работающих на 10% эффективнее (т.к. для "проверки" в общем не нужно модифицировать и тем более ресайзить строку, а вариант с CHRTRAN(,,"") очень активно это делает - даже может оказаться выгоднее делать нечто типа CHRTRAN(...,"ABCDEF","000000") == "00000000000" - для избежания ресайза строки).
Да, такие проверки это ОЧЕНЬ частный случая того что реализуется при помощи регулярных выражений - жаль что в фоксе это не "встроено", но с другой стороны прилепить активиксовый вариант из VBScript - дело 10-ти секунд И зачем мне тогда геморрой с подключением fll (таскай её с собой, не забудь SET LIBRARY сделать, а если таких подключаемых библиотек куча - поборись ещё с конфликтом имён функций в них).
of63
Вот мне показалось удобным STREXTRACT превратить в не просто возвращающей деталь из строки между разделителями, но и одновременно удаляющей из исходной строки возвращаемую часть
Опять же лично мне такого никогда не нужно было. Возможно потому что я не страдаю написанием "своих парсеров", а беру готовые реализации
Да и в дотнете, насколько я знаю, даже STREXTRACT-а то никакого нет - отдают программисту на откуп кодирование такой задачи наиболее оптимальным для его случая способом
По реализации - фокс ОЧЕНЬ неоптимален при манипулировании строками. Так что вариант с выкусыванием найденного по определению будет сильно хуже чем БЕЗ такого выкусывания. А сделать его (выкусывание это) при помощи банального STRTRAN - если уж так приспичило - не составляет особого труда.
И лично мне вариант с 2-мя вызовами простых функций кажется лучше/логичнее/красивее чем перегружать и так не слишком простую STREXTRACT дополнительными флагами/параметрами.

of63
в крайнем случае "выделить новую память" скопировать новое состояние строки, и вернуть новый хендл
Так и работают в фоксе строковые функции (те что модифицируют строку - за достаточно редким исключением) - постоянно гоняется из одного места памяти в другое содержимое... Потому то они и являются весьма и весьма небыстрыми... При том что помимо самого блока с "байтиками строки" для переменной держится ещё и структура с описанием этой переменной - т.е. "напрямую" фокс с "указателем на байтики строки" не работает - всё опосредованно - для автоматического управления памятью и сборки мусора...


------------------
WBR, Igor
Ratings: 0 negative/1 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 alex;  (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика