Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизИмя файла Найти похожие ветки
← →
Ivolg (2004-06-14 19:07) [0]как мона получить имя файла без его расширения. Спасибо!!!
← →
Palladin © (2004-06-14 19:14) [1]нужно получить имя файла и убрать расширение
← →
Ivolg (2004-06-14 19:38) [2]Palladin
Как?
← →
Palladin © (2004-06-14 19:44) [3]что такое расширение файла?
← →
tower (2004-06-14 19:46) [4]filename:="file.xxx";
//в переменной filename имя файла
i:=length(filename);
while (i>0)and (filename[i]<>".") do i:=i-1;
if i>0 then delete(filename,i,length(filename)-i+1);
//в filename только имя файла
← →
Palladin © (2004-06-14 19:53) [5]и часто ты так безолаберно пишешь?
← →
tower (2004-06-14 19:59) [6]Чё не нравится.
← →
Palladin © (2004-06-14 20:00) [7]а ты подумай
← →
tower (2004-06-14 20:04) [8]Не знаю что и думать.
Разве что есть стандартная функция нахождения последнего вхождения подстроки.
Или расширение должно обязательно быть на 3 символа?
← →
default © (2004-06-14 20:08) [9]да вроде верно [4]
← →
Piter © (2004-06-14 20:14) [10]
function ExtractFileNameWithoutExt(FileName: string) : string;
var
i:integer;
s:string;
begin
s := ExtractFileName(FileName);
i := length(ExtractFileExt(FileName));
if i<>0 then
delete(s, length(s) - i +1, i);
Result := s;
end;
← →
default © (2004-06-14 20:17) [11]ChangeFileExt(FileName, "")
← →
GuAV © (2004-06-14 20:17) [12]
> delete(filename,i,length(filename)-i+1);
не оптимальный код и ошибка скорее всего здесь (не уверен, мне лень её искать). Лучше SetLength. Имхо.
← →
Piter © (2004-06-14 20:20) [13]Не, не так...
function ExtractFileNameWithoutExt(FileName: string) : string;
var
i:integer;
s:string;
begin
s := ExtractFileName(FileName);
i := length(ExtractFileExt(FileName));
Result := copy(s, 1, length(s) - i);
end;
← →
Piter © (2004-06-14 20:22) [14]default (14.06.04 20:17) [11]
логично :)
← →
GuAV © (2004-06-14 20:22) [15]
> function ExtractFileNameWithoutExt(FileName: string) : string;
> var
> i:integer;
> s:string;
> begin
> s := ExtractFileName(FileName);
> i := length(ExtractFileExt(FileName));
> Result := copy(s, 1, length(s) - i);
> end;
Зачем так путать? Нельзя ли попроще?
← →
tower (2004-06-14 20:24) [16]Piter(14.06.04 20:22) [14]
Согласен.
← →
default © (2004-06-14 20:25) [17]на мой взгляд неоптим-ть в строке
while (i>0)and (filename[i]<>".") do i:=i-1;
если расш-ие не указано и строка немаленькая, то пока i <> 0 цикл будет бестолку крутиться
← →
Piter © (2004-06-14 20:33) [18]В общем, оптимальным будет считать:
ExtractFileName(ChangeFileExt(FileName, ""))
к тому же, она работает быстрее, чем мой вариант...
← →
tower (2004-06-14 20:40) [19]Может так оптимальней?
ChangeFileExt(ExtractFileName(FileName), "")
← →
GuAV © (2004-06-14 20:58) [20]Меняем биты в байте ? ;-) jack128, результат измерений в студию 8-)
← →
Piter © (2004-06-14 22:01) [21]при чем здесь вообще jack128?
← →
jack128 © (2004-06-14 22:30) [22]
> while (i>0)and (filename[i]<>".") do i:=i-1;
> если расш-ие не указано и строка немаленькая, то пока i
> <> 0 цикл будет бестолку крутиться
а, что есть другие варианты решить подобную задачу?
Я, если Tower не против, подрихтовал его вариант и он стал победителем ;-)function Tower(FileName: string): string;
var
i: Integer;
begin
Result := ExtractFileName(FileName);
i := Length(Result);
while (i > 0) and (Result[i] <> ".") do i:=i-1;
if i > 0 then
SetLength(Result, i - 1);
end;
function Default(FileName: string): string;
begin
Result := ExtractFileName(ChangeFileExt(FileName, ""));
end;
function Piter(FileName: string) : string;
var
i:integer;
s:string;
begin
s := ExtractFileName(FileName);
i := length(ExtractFileExt(FileName));
Result := copy(s, 1, length(s) - i);
end;
procedure TForm1.Button1Click(Sender: TObject);
const
N = 1000000;
fn = "c:\ fifhed\fhkldj\coc3fe9.lsafs";
var
tPiter, tDefault, tTower: Cardinal;
i: Integer;
s: string;
begin
tDefault := GetTickCount;
for i := 0 to N do
s := Default(fn);
tDefault := GetTickCount - tDefault;
Memo1.Lines.Add(s);
tPiter := GetTickCount;
for i := 0 to N do
s := Piter(fn);
tPiter := GetTickCount - tPiter;
Memo1.Lines.Add(s);
tTower := GetTickCount;
for i := 0 to N do
s := Tower(fn);
tTower := GetTickCount - tTower;
Memo1.Lines.Add(s);
Caption := Format("Default = %d, Piter = %d, Tower = %d", [tDefault, tPiter, tTower]); // 2744, 3535, 2183
end;
> при чем здесь вообще jack128?
вот поэтому ;-)
← →
default © (2004-06-14 22:42) [23]прикол...я вообще не соревновался ни с кем, тот вариант был как минимальный код...ну да ладно
← →
jack128 © (2004-06-14 22:46) [24]
> прикол...я вообще не соревновался ни с кем
Просто твоя фраза про основной тормоз меня заинтересовала.. Так что, как видишь, не такой уж это и тормоз ;-)
ExtractFileExt - тоже самое делает, но с кой какими заморочками, поэтому и медленее..
← →
default © (2004-06-14 23:06) [25]jack128 © (14.06.04 22:46) [24]
меня "сподвигнули" на ту фразу воспоминания о трёхсимвольных(максимально) расширениях в дос...
← →
GuAV © (2004-06-15 00:07) [26]Default = 1500, Default_Tower = 1520, Tower_orig = 1021, Piter = 1700, Tower = 975
Default_Tower - [19]
Tower_orig - без "подрихтовал его вариант" - через Delete.
← →
RealRascal © (2004-06-15 17:34) [27]
Function GetNameWithoutExt(Filename:string):string;
begin
Result:=StringReplace(Extractfilename(filename),ExtractFileExt(filename),"",[rfIgnoreCase])
end;
Не проверял. Возможно, придется точку добавить к расширению при замене
← →
Anatoly Podgoretsky © (2004-06-15 17:37) [28]RealRascal © (15.06.04 17:34) [27]
Ну ты даешь, вот вполне нормалное имя doc.doc.doc
← →
RealRascal © (2004-06-15 17:44) [29]Угу... Просто это первое что пришло в голову... Значит надо заменить StringReplace на функцию, которя делает замену начиная с определенного символа, не помню как называется...
← →
Anatoly Podgoretsky © (2004-06-15 17:47) [30]А зачем все это, при наличии штатной функции ChangeFileExt
← →
RealRascal © (2004-06-15 17:52) [31]По названию этой функции я решил, что она изменяет расширение файла физически, т.е. на диске... Все, посмотрел в хелпе,
function ChangeFileExt(const FileName, Extension: string): string;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c