Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обрезание расширений


Страницы:   1 2

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  ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо