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

Вниз

получить имя файла без расширения   Найти похожие ветки 

 
malyar   (2007-10-23 18:09) [0]

привет всем
народ подскажите как получить из имени файла с расширением
имя файла без расширения
s:="proga.exe" s:="pr.o.g.a.exe"
как правилино отсеч расширение у выше приведенных файлов?

существует ли функция (поиск вхождения строки в строку) где поиск начинается не сначала а с конца строки ?


 
Palladin ©   (2007-10-23 18:11) [1]

ага

Function CharPosBack(c:Char;Const s:String):Integer;
Var
 i:Integer;
Begin
 For i:=Length(s) Downto 1 Do
  If s[i]=c Then
   Begin
    Result:=i;
    Exit;
   End;
 Result:=0;
End;


 
antonn ©   (2007-10-23 18:14) [2]

function DeleteExtension( Filename : String) : string;
var Ext : String; extl, p : Integer;
begin
Ext := ExtractFileExt(filename);
extl := Length(Ext);
P := Pos(Ext, Filename);
if P <> 0 then begin
Delete(Filename, Length(Filename) - extl + 1 ,extl);
Result := Filename;
end;
end;


 
Reindeer Moss Eater ©   (2007-10-23 18:16) [3]

крута

а если proga.exeblablabla.exe ?


 
clickmaker ©   (2007-10-23 18:17) [4]

ChangeFileExt(Filename, "");


 
Amoeba ©   (2007-10-23 18:19) [5]


> antonn ©   (23.10.07 18:14) [2]

а если имя файла, к примеру будет типа хyz.exe.exe (вполене допустимое, между прочим)? Что получим на выходе?


 
Palladin ©   (2007-10-23 18:19) [6]

у как жестоко :)

Function FileNameWOExt(Const s:String):String;
Var
n:Integer;
Begin
n:=CharPosBack(".",s);
If n=0 Then Result:=s Else Result:=Copy(s,1,n-1);
End;


 
Amoeba ©   (2007-10-23 18:20) [7]


> Reindeer Moss Eater ©   (23.10.07 18:16) [3]

Опередил!


 
antonn ©   (2007-10-23 18:24) [8]


> а если имя файла, к примеру будет типа хyz.exe.exe (вполене
> допустимое, между прочим)? Что получим на выходе?

получим хyz.exe


 
Amoeba ©   (2007-10-23 18:25) [9]


> antonn ©   (23.10.07 18:24) [8]
>
>
> > а если имя файла, к примеру будет типа хyz.exe.exe (вполене
> > допустимое, между прочим)? Что получим на выходе?
>
> получим хyz.exe
>

Естественно!!!


 
Palladin ©   (2007-10-23 18:26) [10]


> antonn ©   (23.10.07 18:24) [8]

пример тебе не верный привели, таким быть должен он (с) Йода :)

file.txt.ext.ext.txt


 
Reindeer Moss Eater ©   (2007-10-23 18:27) [11]

а если proga.exeblablabla.exe


 
antonn ©   (2007-10-23 18:29) [12]

давайте сразу скажите, что там не так?
file.txt.ext.ext.txt - file.txt.ext.ext
proga.exeblablabla.exe - proga.exeblablabla


 
megabyte ©   (2007-10-23 18:38) [13]

Отсекаем с конца 4 символа и всего делов-то...


 
Reindeer Moss Eater ©   (2007-10-23 18:38) [14]

ок.
а вот это-то зачем?

P := Pos(Ext, Filename);
if P <> 0 then

на случай если расширения нет совсем?
так логичнее просто проверять на пустую строку саму Ext.


 
malyar   (2007-10-23 18:39) [15]

thx


 
antonn ©   (2007-10-23 18:43) [16]


> Отсекаем с конца 4 символа и всего делов-то...

.mpeg/.jpeg/.divx и тд :)


 
antonn ©   (2007-10-23 18:43) [17]


> Reindeer Moss Eater ©   (23.10.07 18:38) [14]

для наглядности %)


 
Anatoly Podgoretsky ©   (2007-10-23 19:23) [18]

> malyar  (23.10.2007 18:09:00)  [0]

ChangeFileExt


 
Riply ©   (2007-10-23 22:52) [19]

> [6] Palladin ©   (23.10.07 18:19)
Такой некузяво обработает
C:\My.Super.Puper.Dir\Test.exe
:)


 
DVM ©   (2007-10-23 22:55) [20]

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


 
Riply ©   (2007-10-24 00:03) [21]

> [20] DVM ©   (23.10.07 22:55)
Споткнемся на: C:\MyDir\MyFile.txt:mydata
Правда, строго говоря, это не совсем файл, но имеет право на существование :)


 
DVM ©   (2007-10-24 00:08) [22]


> Riply ©   (24.10.07 00:03) [21]

так не честно


 
Германн ©   (2007-10-24 01:22) [23]


> DVM ©   (24.10.07 00:08) [22]
>
>
> > Riply ©   (24.10.07 00:03) [21]
>
> так не честно
>

Не честно предлагать попробовать на своём компьютере имя файла Con. А [21] - это просто шутка, но увы. Лёгка была жизнь только при 8.3 :)


 
megabyte ©   (2007-10-24 10:47) [24]


> antonn ©   (23.10.07 18:43) [16]
>
> > Отсекаем с конца 4 символа и всего делов-то...
>
> .mpeg/.jpeg/.divx и тд :)

фишка в том, что, исходя из задачи, можно понять, какой длины будет расширение :Р *типа отмазался*


 
Reindeer Moss Eater ©   (2007-10-24 11:21) [25]

FileNameWoExt := Copy(FileName,1,Abs(StrRScan(PChar(FileName),".") - PChar(FileName)));


 
Riply ©   (2007-10-24 11:48) [26]

>[25] Reindeer Moss Eater ©   (24.10.07 11:21)
> Copy(FileName,1,Abs(StrRScan(PChar(FileName),".") - PChar(FileName)));

Напартачим с таким файлом:
C:\MySuper.Puper.Directory\FileWithOutExt    
:)


 
Reindeer Moss Eater ©   (2007-10-24 12:22) [27]

SetLength(FileNameWoExt,Length(FileName));
ZeroMemory(PChar(FileNameWoExt),Length(FileNameWoExt));

StrLCopy(PChar(FileNameWoExt),
         PChar(Max(Integer(PChar(FileName)),succ(Integer(StrRScan(PChar(FileName),"\")))) ),
         Abs(
             StrRScan(PChar(FileName),".")
             -
             PChar(Max(Integer(PChar(FileName)),succ(Integer(StrRScan(PChar(FileName),"\")))) )
             )
          );

:)


 
Riply ©   (2007-10-24 12:54) [28]

>[27] Reindeer Moss Eater ©   (24.10.07 12:22)

Ой торопишся...
На такой файл : FileName := "C:\MySuper.Puper.Dir\TestFile",
приведенный тобой код мне сообщает, что имя без расширения выглядит так: "TestF" :)


 
Reindeer Moss Eater ©   (2007-10-24 13:07) [29]

Хорошо, будем использовать предварительное ExtractFileName.
Хотя я еще не сдаюсь.


 
Riply ©   (2007-10-24 13:31) [30]

Я бы попробовала так:
в одном цикле с конца FileName, делала бы проверку типа:
case FileName[i] of
 "\": нет расширения - выходим;
 ":": зависит от того интересуют нас "поточные файлы или нет".
      для обычных: нет расширения - выходим;
 ".": фиксируем сколько символов в расширении, выходим;
 else dec(i);
end;



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.033 c
5-1154350531
Opilki_Inside
2006-07-31 16:55
2007.11.18
Использование Repository


15-1192327841
Dmitry S
2007-10-14 06:10
2007.11.18
КПД апокалипсиса


2-1193493258
antonn
2007-10-27 17:54
2007.11.18
вызов процедуры по адресу


15-1192607772
de.
2007-10-17 11:56
2007.11.18
LIKE АБВ%


15-1192257156
Kostafey
2007-10-13 10:32
2007.11.18
С днем рождения ! 13 октября