Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Имя файла   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
6-1083608490
Alex B.
2004-05-03 22:21
2004.06.27
Нужно узнать IP по MACу!


14-1086808999
УНЯ
2004-06-09 23:23
2004.06.27
Молодежь против безнравственности...


3-1085941851
Viktor
2004-05-30 22:30
2004.06.27
Перекодировка таблиц


3-1085979974
angelcom
2004-05-31 09:06
2004.06.27
Програмно обновить статистику всех индексов


14-1086429522
Cardinal
2004-06-05 13:58
2004.06.27
Аксиома измерения площадей отдыхает (задачка)