Что нового

Как определить расширение файла?

ArtInt

Знающий
Сообщения
135
Репутация
18
Вроде было, но я не нашёл)
И, если можно, приведите вариант без регулярных выражений. Если нельзя, то с ними :(
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот один из вариантов:
Код:
$Path = 'C:\Windows\shell32.dll'
$Exp = StringRegExpReplace($Path, '.*\.(\S+)', '\1')
MsgBox(0, '', $Exp)
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Еще есть удобная вещь
Код:
_PathSplit
, подробно в справке описанная
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
ArtInt [?]
И, если можно, приведите вариант без регулярных выражений.

Код:
$sPath = 'C:\Windows\shell32.dll'
$sExt=StringMid($sPath,StringInStr($sPath, ".", 0, -1)+1)
MsgBox(0, "", "$sExt=" & $sExt)




Добавлено:
Сообщение автоматически объединено:

При необходимости можно ввести проверку на наличие расширения :
Код:
If $sExt <> $sPath Then MsgBox(0, "", "$sExt=" & $sExt)
 

AZJIO

Меценат
Меценат
Сообщения
2,768
Репутация
1,156
Zaramot
Забраковал я вашу регулярку
Код:
$Path= 'D:\Do.cum\Fileau3'
$Exp = StringRegExpReplace($Path, '.*\.(\S+)', '\1')
MsgBox(0, '', $Exp)

Проблема в том что она ищет точку но не проверяет что после точки не должно быть "\", и кроме того общая для всех проблема, если паттерн не найден то возвращает всю строку целиком.

И некоторые другие кстати, в том числе и мою
Код:
$Path= 'D:\Do.cum\Fileau3'
$Exp=StringRegExpReplace($Path, '^(?:.*\.)([^\\]+)$', '\1')
MsgBox(0, '', $Exp)


А теперь правильный ответ:
Код:
$test = 'D:\Do.cum\Fileau3'
; $test = 'D:\Docum\File.au3'
; $test = StringRegExpReplace($test, '^(?:.*\\[^\\]*?)(\.[^.]+)?$', '\1')
$test = StringRegExpReplace($test, '^(?:.*\\.*?)(\.[^.]+)?$', '\1')
MsgBox(0, 'Сообщение', '|' & $test & '|')

Здесь если паттерн не найден то возвращает пустую строку, что значит расширение отсутствует.
 
Верх