nikita1996spb
Новичок
- Сообщения
- 19
- Репутация
- 0
Здравствуйте! Подскажите пожалуйста, как сделать так, чтобы скрипт сравнивал расширения 2 файлов(имена разные) и, исходя из результатов делал что-либо? Если можно, то функцией. Грубо говоря, так:
Func _ExtractFromPath($sPath, $ID)
Local $sName, $sExt, $sFakePath
$sName = StringRegExpReplace($sPath,"^.*\\(.*?)$",'\1')
If $sName == $sPath Then $sName = ''
$sExt = StringRegExpReplace($sName, ".*\.(.*?)$", '\1')
If $sExt == $sName Then
$sExt = ''
Else
$sExt = '.' & $sExt
$sName = StringReplace($sName,$sExt,'')
EndIf
$sFakePath = StringReplace($sPath, $sName & $sExt,'')
Switch $ID
Case 1
Return $sName
Case 2
Return $sExt
Case 3
Return $sFakePath
Case 4
Return $sName & $sExt
EndSwitch
EndFunc
"^.*\\(.*?)$"
_ExtractFromPath("C:/wish.txt", 2)
$file1 = "C:/wish.txt"
$file2 = "C:/fake.txt"
CompareType($file1,$file2)
Func _ExtractFromPath($sPath, $ID)
Local $sName, $sExt, $sFakePath
$sName = StringRegExpReplace($sPath,"^.*\\(.*?)$",'\1')
If $sName == $sPath Then $sName = ''
$sExt = StringRegExpReplace($sName, ".*\.(.*?)$", '\1')
If $sExt == $sName Then
$sExt = ''
Else
$sExt = '.' & $sExt
$sName = StringReplace($sName,$sExt,'')
EndIf
$sFakePath = StringReplace($sPath, $sName & $sExt,'')
Switch $ID
Case 1
Return $sName
Case 2
Return $sExt
Case 3
Return $sFakePath
Case 4
Return $sName & $sExt
EndSwitch
EndFunc
Func CompareType($path1,$path2)
If _ExtractFromPath($path1, 2) == _ExtractFromPath($path2, 2) Then
Return 1 ;совпадает
Else
Return 0 ; не совпадает
EndIf
EndFunc
$FirstFile = 'C:\test.txt' ;Первый файл
$SecondFile = 'C:\hello.doc' ;Второй файл
If _CompareType($FirstFile, $SecondFile) = 1 Then ;Если разширение одинаковы
;Какой-то действие
Else ;Если разширение не одинаковы
;Какой-то действие
EndIf
;Функция для сравнение
;Возвращяет 1 если разширения одинаковы и 0 - если нет.
Func _CompareType($iFile1, $iFile2)
Local $FileExp1 = StringRegExpReplace($iFile1, '.*\.(\S+)', '\1')
Local $FileExp2 = StringRegExpReplace($iFile2, '.*\.(\S+)', '\1')
If $FileExp1 = $FileExp2 Then
Return 1
Else
Return 0
EndIf
EndFunc
Func CompareType($path1,$path2)
Local $r1 = StringMid( $path1, StringLen($path1)-2, 3)
Local $r2 = StringMid( $path2, StringLen($path2)-2, 3)
;Выделяем из пути к файлу 3 последних буквы и сравниваем
If $r1 == $r2 Then
MsgBox(0,"","Расширения одинаковые")
Else
MsgBox(0,"","Расширения разные")
EndIf
EndFunc
Если эти файлы или папки существуют, то можно воспользоваться двумя функциями из WinAPIEx.au3Если ему попадется папка с точкой, или файл с несколькими точками
А как будет работать с, например, test.html или с google-translate.js ? :whistle:Выделяем из пути к файлу 3 последних буквы и сравниваем
Я не об этом. Просто немного RegExp неправильно написан.Если эти файлы или папки существуют, то можно воспользоваться двумя функциями из WinAPIEx.au3
А если файл имеет 4 или 2 или 1 букву расширения? Или расширения вообще нет?;Выделяем из пути к файлу 3 последних буквы и сравниваем
Просто немного RegExp неправильно написан.
MsgBox(64, 'Info', StringRegExpReplace('C:\Documents and Settings\Adnin\Рабочий стол\12.3456.432..txt', '^.*\.', ''))
В этом случаи всё в порядке. И с несколькими точками - тожеА если файл имеет 4 или 2 или 1 букву расширения?
Можно поставить проверку.Или расширения вообще нет?
Func FindAllPath($sPath)
Dim $aAllPath[4]
$sParentDir = ''
$aPath = StringSplit($sPath, '\')
If $aPath[0] = 2 $sParentDir = 'aPath' & ':\'
For $i = 1 to $aPath[0] - 1
$sParentDir &= $aPath[$i] & '\'
Next
$aAllPath[0] = $sParentDir
$sFileName = $aPath[$aPath[0]]
$aAllPath[1] = $sFileName
$sExt = ''
$aFileName = StringSplit($sFileName, '.')
$sFileNameRoot = $aFileName[1]
$aAllPath[2] = $sFileNameRoot
If $aFileName[0] > 1 $sExt = $aFileName[$aFileName[0]]
$aAllPath[3] = $sExt
Return $aAllPath
EndFunc
;$sPath = 'F:\Addons\3-dllsfull\Run'
$sPath = 'C:\Documents and Settings\Admin\Рабочий стол\12.3456.432..txt'
$iCount = StringInStr($sPath, '.', 0, -1)
If $iCount Then
MsgBox(64, 'Info', 'Extension: ' & StringTrimLeft($sPath, $iCount))
Else
MsgBox(64, 'Info', 'No Extension')
EndIf
если не считать регвыров, то все строковые варианты сводятся к одному – парсингу точек и слешейИнтересно, сколько еще вариантов есть.
$file1 = "C:\wish.txt"
$file2 = "C:\wis4325h.txt"
; !i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i
If _Type1($file1)=_Type1($file2) Then
MsgBox(0, 'первый вариант', 'Совпадают')
Else
MsgBox(0, 'первый вариант', 'Не совпадают')
EndIf
Func _Type1($Path)
Local $SLen, $tmp
$SLen=StringLen($Path)
$tmp=StringInStr($Path, '.', 0, -1, $SLen, $SLen-StringInStr($Path, '\', 0, -1))
If $tmp = 0 Then Return SetError(1, 0, '')
Return StringTrimLeft($Path, $tmp)
EndFunc
; !i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i
If _Type2($file1)=_Type2($file2) Then
MsgBox(0, 'второй вариант', 'Совпадают')
Else
MsgBox(0, 'второй вариант', 'Не совпадают')
EndIf
Func _Type2($Path)
Local $tmp
$tmp=StringInStr($Path, '.', 0, -1)
If $tmp = 0 Then Return SetError(1, 0, '')
$tmp=StringTrimLeft($Path, $tmp)
If StringInStr($tmp, '\') Then
Return SetError(1, 0, '')
Else
Return $tmp
EndIf
EndFunc
; !i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i
If _Type3($file1)=_Type3($file2) Then
MsgBox(0, 'третий вариант', 'Совпадают')
Else
MsgBox(0, 'третий вариант', 'Не совпадают')
EndIf
Func _Type3($Path)
If StringRegExp($Path, '^(?:.*\.)([^\\]+)$') Then
Return StringRegExpReplace($Path, '^(?:.*\.)([^\\]+)$', '\1')
Else
Return SetError(1, 0, '')
EndIf
EndFunc