![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обрезание расширений
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]выравнять по точкам в расширениях и ножичком.
быстрее всего их туда добавлять уже без расширений.