![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обрезание расширений
demon © (2008-11-24 17:14:00)Есть TStringList с 8000 именами файлов с расширением.
Как быстрее всего обрезать расширения у имен файлов?
Virgo_Style (2008-11-26 11:10:00) [1]Плохиш © (25.11.08 18:45) [29]
А пойти от конца к началу религия не позволяет
Сначала я подумал именно о таком варианте, но отбросил его как неоптимальный. Я был бы безмерно благодарен, если бы драгоценный преждерожденный пояснил бы, почему это не так.
Германн (2008-11-26 04:17:00) [2]
> palva © (25.11.08 22:37) [30]
>
>
> > о великийизобретательвелосипедастреугольнымиколёсами
>
> Бывают такие дороги, добиться плавности хода по которым
> можно только изобретя треугольные колеса. Увы.
Не надо ездить (ходить) по таким дорогам.
Palladin (2008-11-25 23:27:00) [3];) увы, авторы тех дорог сродни авторам треугольносипедов...
palva (2008-11-25 22:37:00) [4]
> о великийизобретательвелосипедастреугольнымиколёсами
Бывают такие дороги, добиться плавности хода по которым можно только изобретя треугольные колеса. Увы.
Плохиш (2008-11-25 18:45:00) [5]
> Virgo_Style © (25.11.08 16:19) [26]
> Проход по исходной строке от начала к концу SrcPos = 1..
> Length(Src) :
А пойти от конца к началу религия не позволяет, о великийизобретательвелосипедастреугольнымиколёсами?
Palladin (2008-11-25 18:32:00) [6]А главное - с его использованием понятно, что же в коде происходит :)
А то потом... отделить ногу от уха, пробежатся по ноге, уйти в никуда, добежать обратно до предыдущей точки соприкосновения ноги с ухом, выяснить что это часть маникена, побежать до точки соединения с маникеном, увидеть соседа справа, и выяснить что это его рука, только бритая...
Юрий Зотов (2008-11-25 17:12:00) [7]Конечно, левое ухо можно чесать не только левой рукой. Хоть правой ногой, если кому это нравится.
Но ChangeFileExt все же удобнее.
Virgo_Style (2008-11-25 16:19:00) [8]А вроде и ничего сложного... по крайней мере, на бумаге.
пусть исходная строка Src, новая New;
NewPos - "указатель" на текущий символ строки-результата,
SrcPos - "указатель" на текущий символ в строке-исходнике,
в DlmPos будем запоминать позицию крайнего разделителя имя-расширение
Проход по исходной строке от начала к концу SrcPos = 1..Length(Src) :
если Src[SrcPos] = разделитель имя-расширение ("."), то DlmPos = NewPos;
если Src[SrcPos] = разделитель имен (#13 и/или #10), то
если DlmPos>0, то NewPos = DlmPos;
DlmPos = 0;
копируем символ из Src[SrcPos] в New[NewPos]
inc(SrcPos);
inc(NewPos);
Как-то так, если нигде не лопухнулся.
Virgo_Style (2008-11-25 16:03:00) [9]palva © (24.11.08 22:49) [23]
А вот если это индексированное свойство стринглиста, тогда есть сомнения, что такая штука сработает.
Смотря какая штука. Копируем .Text в строку-буфер, выделяем еще один буфер под строку-результат и... начинаем думать над правилами переноса из первой во вторую. Но вроде ничего такого волшебного в ней быть не должно.
Германн (2008-11-25 01:47:00) [10]
> Плохиш © (24.11.08 18:38) [17]
>
>
Не. Я не настырный. Я вредный! :)
И по "вредности" считаю, что я второй после АП. (Кэтмар где-то потерялся. В "Украинских пустынях", наверно.:)
palva (2008-11-24 22:49:00) [11]
> как обойтись без перевыделения памяти
Если это строка, то можно просто укоротить строку при помощи SetLength. А вот если это индексированное свойство стринглиста, тогда есть сомнения, что такая штука сработает.
Virgo_Style (2008-11-24 22:09:00) [12]imho есть уж ловить блох - то стоит подумать над тем, как обойтись без перевыделения памяти 8000 раз, или я ошибаюсь?
palva (2008-11-24 20:46:00) [13]
> да ладно. Где об этом сказано?
Где-то читал такое. Хотя сейчас попробовал зарегистрировать расширение из семи букв - и все работает - на него запускается блокнот.
Может быть это касалось Windows 98, может быть ext3, а может быть вообще была ошибка автора книги.
clickmaker (2008-11-24 19:47:00) [14]> В Windows есть ограничение на длину расширений. По-моему
> 5 символов
да ладно. Где об этом сказано?
Anatoly Podgoretsky (2008-11-24 19:35:00) [15]file.manifest
Нет ни ограничений, ни расширений - это только видимость и есть поддержка этой видимости.
palva (2008-11-24 19:23:00) [16]В Windows есть ограничение на длину расширений. По-моему 5 символов. То есть .shtml это еще расширение, а если символов больше, то файл должен считаться как не имеющий расширения. Наверно есть и другие нюансы, которые могут измениться в будущих версиях Windows. Так что лучше пользоваться готовыми функциями.
Плохиш (2008-11-24 18:38:00) [17]
> Германн © (24.11.08 17:54) [10]
Ну ты настырный :-)
Правильный$Вася (2008-11-24 18:16:00) [18]
> у которых имена типа .htaccess ?
или типа "моя не понимать......."
clickmaker (2008-11-24 18:13:00) [19]> а как быть с файлами, у которых имена типа .htaccess
в семье не без урода. Не повезло им :)
DVM (2008-11-24 18:08:00) [20]а как быть с файлами, у которых имена типа .htaccess ?