Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1081771345
Dimbas
2004-04-12 16:02
2004.06.27
Проверка на наличие кодека


9-1078085062
miek
2004-02-29 23:04
2004.06.27
Что делать?


4-1085128930
Style
2004-05-21 12:42
2004.06.27
ProcessID и ThreadID


3-1085748952
S@shka
2004-05-28 16:55
2004.06.27
FLOAT NUMERIC или INTEGER


1-1087203054
mika
2004-06-14 12:50
2004.06.27
тексовые файлы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский