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 именами файлов с расширением.
Как быстрее всего обрезать расширения у имен файлов?


DevilDevil   (2008-11-24 18:06:00) [21]

> clickmaker ©   (24.11.08 18:03) [11]
некорректно.


DevilDevil   (2008-11-24 18:06:00) [22]

мда...

var
 S: string;
 i: integer;

 for i := Length(S) downto 1 do
 if (S[i] = '.') then
 begin
   SetLength(S, i-1) ;
   break;
 end;


Это почти самый быстрый способ на ЯВУ с учётом, что файл обладает расширением.


clickmaker   (2008-11-24 18:03:00) [23]

> Самый быстрый вариант - начиная с конца строки искать точку,
> если найдена, то усекаем строку до точки

хм.. может, так?

dot := LastDelimiter('.', filename);
if (dot > 0) then
 filename[dot] := #0;


Германн   (2008-11-24 17:54:00) [24]

А чем всё-таки ChangeFileExt не устраивает?


DVM   (2008-11-24 17:53:00) [25]


> это ведь сэкономит некоторое время?

Сэкономит, но имхо ловля блох. Самый быстрый вариант - начиная с конца строки искать точку, если найдена, то усекаем строку до точки, если не найдена, то ничего не делаем.


demon   (2008-11-24 17:51:00) [26]

А если делать не через функцию, а непосредственно, это ведь сэкономит некоторое время?


DVM   (2008-11-24 17:45:00) [27]

Вот про обрезание http://www.freeimagehosting.net/uploads/1ebfc942c6.jpg

А если серьезно:

function ExtractFileNameWoExt(const FileName : string) : string;
begin
 Result := ExtractFileName(FileName);
 Result := Copy( Result, 1, Length(Result) - Length(ExtractFileExt(Result)));
end;


clickmaker   (2008-11-24 17:44:00) [28]

> Или можно более грамотно?

найти последнюю точку
скопировать все, что до нее
либо удалить все, что после нее


demon   (2008-11-24 17:41:00) [29]

Единственные путь что я вижу это измерить длинну строки вернутой ExtractFileExt и обрезать такое же количество символов с конца.
Или можно более грамотно?


Германн   (2008-11-24 17:38:00) [30]

ChangeFileExt поможет ОРД.


clickmaker   (2008-11-24 17:28:00) [31]

ну да, неверно
хотя бы потому, что расширение не обязательно 3 символа


demon   (2008-11-24 17:23:00) [32]

ok, так и сделаю, только как быстрее всего это обрезать?
я делал так:
           s:=extractfilename(s);
           delete(s, length(s)-3, 4);
           ListBox1.Items[i]:=s;

Но это ведь неверно...


clickmaker   (2008-11-24 17:17:00) [33]

выравнять по точкам в расширениях и ножичком.

быстрее всего их туда добавлять уже без расширений.


Страницы:   1 2

Наверх

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