Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.05 c
4-1178126275
Альберт
2007-05-02 21:17
2007.11.18
перевод 8 битного битмапа в 24 битный


1-1188223761
DevilDevil
2007-08-27 18:09
2007.11.18
WMNCHITTEST и HTCAPTION


15-1192174488
Azize
2007-10-12 11:34
2007.11.18
Web технологии и поддержка


2-1193567128
MaximusI
2007-10-28 13:25
2007.11.18
TExcelApplication


2-1193223678
Ega23
2007-10-24 15:01
2007.11.18
Parent и Owner





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский