AppleScript名:指定フォルダ以下のテキストファイルのファイル名冒頭についている数字から欠番を求める |
— Created 2017-09-04 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use framework "Foundation" use scripting additions use mdLib : script "Metadata Lib" version "1.0.0" –https://www.macosxautomation.com/applescript/apps/Script_Libs.html#Metadata_Lib use bPlus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html property NSString : a reference to current application’s NSString property SMSForder : a reference to current application’s SMSForder property NSIndexSet : a reference to current application’s NSIndexSet property NSMutableSet : a reference to current application’s NSMutableSet property NSMutableArray : a reference to current application’s NSMutableArray property NSRegularExpression : a reference to current application’s NSRegularExpression property NSRegularExpressionAnchorsMatchLines : a reference to current application’s NSRegularExpressionAnchorsMatchLines property NSRegularExpressionDotMatchesLineSeparators : a reference to current application’s NSRegularExpressionDotMatchesLineSeparators load framework –BridgePlus’s force framework loading command –選択したフォルダ以下のPlain TextをすべてSpotlightで求める(POSIX path list) set theFolder to (choose folder) set a1Dat to current application’s NSDate’s timeIntervalSinceReferenceDate() set aRes to retMissingNumberFromEachFiles(theFolder, {"public.plain-text"}) of me –> {} set b1Dat to current application’s NSDate’s timeIntervalSinceReferenceDate() set c1Dat to b1Dat – a1Dat on retMissingNumberFromEachFiles(theFolder, fileTypeList) set theFiles to mdLib’s searchFolders:{theFolder} searchString:"kMDItemContentType IN[c] %@" searchArgs:fileTypeList if theFiles = {} then return –取得したPOSIX Pathのリストからファイル名の部分のみ抽出 set anArray to NSMutableArray’s arrayWithArray:theFiles set bArray to (anArray’s valueForKeyPath:"lastPathComponent") as list –各ファイルの名称の冒頭から1~3桁 の数字を取り出して、全角–>半角変換を行いつつリストに追加 set nArray to NSMutableArray’s new() repeat with i in bArray set j to contents of i set aRes to (my findPattern:"^\\d{1,3}" inString:j) if aRes is not equal to {} then set jj to (contents of first item of aRes) as string set jj2 to (SMSForder’s transformedFrom:jj ICUTransform:"Fullwidth-Halfwidth" inverse:false) as integer (nArray’s addObject:jj2) end if end repeat –最大値、最小値をもとに連番リストを作成し、ファイル名から得られた配列データとの補集合を求める set maxRes to (nArray’s valueForKeyPath:"@max.self")’s intValue() set minRes to (nArray’s valueForKeyPath:"@min.self")’s intValue() –最小値から最大値までの連番リスト作成 set theIndexSet to NSIndexSet’s indexSetWithIndexesInRange:{minRes, maxRes} set theList to (SMSForder’s arrayWithIndexSet:theIndexSet) as list set aSet to NSMutableSet’s setWithArray:theList set bSet to NSMutableSet’s setWithArray:nArray aSet’s minusSet:bSet –補集合 return (aSet’s allObjects() as list) end retMissingNumberFromEachFiles on findPattern:thePattern inString:theString set theOptions to ((NSRegularExpressionDotMatchesLineSeparators) as integer) + ((NSRegularExpressionAnchorsMatchLines) as integer) set theRegEx to NSRegularExpression’s regularExpressionWithPattern:thePattern options:theOptions |error|:(missing value) set theFinds to theRegEx’s matchesInString:theString options:0 range:{location:0, |length|:length of theString} set theFinds to theFinds as list set theResult to {} set theNSString to NSString’s stringWithString:theString repeat with i in theFinds set theRange to (contents of i)’s range() set end of theResult to (theNSString’s substringWithRange:theRange) as string end repeat return theResult end findPattern:inString: |
More from my site
(Visited 50 times, 1 visits today)