AppleScript名:指定矩形内に含まれるデータをリストで返す v3 |
— Created 2017-06-22 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {{507, 162}, {338, 166}, {389, 166}, {448, 166}, {286, 110}, {504, 109}, {558, 108}, {341, 113}, {394, 115}, {447, 112}, {234, 107}, {611, 110}, {286, 58}, {501, 63}, {556, 58}, {337, 59}, {391, 60}, {448, 63}, {611, 58}} set rangeList to {{500, 100}, {550, 180}} –{{x1,y1}, {x2,y2}} set resList to withinRange(rangeList, aList) of me –> {{507, 162}, {504, 109}} on withinRange(rangeList as list, targetList as list) set aRect to makeNSRect(rangeList) of me set includedList to {} repeat with i in targetList copy i to {x, y} set aPoint to current application’s NSMakePoint(x, y) set aRes to (current application’s NSPointInRect(aPoint, aRect)) as boolean if aRes = true then set the end of includedList to contents of i end if end repeat return includedList end withinRange on makeNSRect(aList as list) try copy aList to {{x1, y1}, {x2, y2}} set xWidth to (x2 – x1) set yHeight to (y2 – y1) set a1Rect to {origin:{x:x1, y:y1}, |size|:{width:xWidth, height:yHeight}} return a1Rect on error return missing value end try end makeNSRect |
タグ: 10.12savvy
NSRectからの各種情報取得
AppleScript名:NSRectからの各種情報取得 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aRect to current application’s NSMakeRect(0, 0, 100, 80) –> {origin:{x:0.0, y:0.0}, |size|:{width:100.0, height:80.0}} set aWidth to current application’s NSWidth(aRect) –> 100.0 set aHeight to current application’s NSHeight(aRect) –> 80.0 set aMinX to current application’s NSMinX(aRect) –> 0.0 set aMaxX to current application’s NSMaxX(aRect) –> 100.0 set aMidX to current application’s NSMidX(aRect) –> 50.0 set aMinY to current application’s NSMinY(aRect) –> 0.0 set aMaxY to current application’s NSMaxY(aRect) –> 80.0 set aMidY to current application’s NSMidY(aRect) –> 40.0 |
macOS 10.13以降は(何の説明もなく)NSMakeRectの返り値が変わっているので、注意が必要です。
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
set aRect to current application’s NSMakeRect(0, 0, 100, 80)
–> {origin:{x:0.0, y:0.0}, |size|:{width:100.0, height:80.0}}
–> {{0.0, 0.0}, {100.0, 80.0}}–macOS 10.13 or later
配列の要素数を取得する
Cocoaの配列の要素数を取得するAppleScriptです。
AppleScriptの配列であるリスト型変数については、length ofやcount ofで要素数を求められますが、
set aList to {1, 3, 5, 7, 9} length of aList --> 5 count of aList --> 5
Cocoaの配列であるNSArrayやNSMutableArrayについてはこのように求めます。
AppleScriptのリスト型変数には、GUIアプリケーションのオブジェクトやAppleScriptのScriptオブジェクトを格納することが可能ですが、Cocoaの配列であるNSArrayやNSMutableArrayにこれらを代入することはできません。
AppleScript名:配列の要素数を取得する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –要素数を取得する set aSize to anArray’s |count|() –> 3 |
n次元のリストのすべてのアイテム数をカウント
n次元のリスト(配列)のすべてのアイテム数をカウントするAppleScriptです。
2次元でも3次元でも4次元でも、いかなる多次元配列のリストをも1次元配列に変換できるサブルーチン「FlattenList」はいまだに代替できるものが見当たらないほど万能で、この「要素数をカウントする」用途にも使ってみました。
AppleScript名:n次元のリストのすべてのアイテム数をカウント |
— Created 2017-10-30 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {{1, 2, 3}, {4, 5, 6}, {7, 8, 9, {1, 2, 3}}} set aRes to FlattenList(aList) of me set aLen to length of aRes on FlattenList(aList) set oldDelims to AppleScript’s text item delimiters set AppleScript’s text item delimiters to {"????"} set aString to aList as text set aList to text items of aString set AppleScript’s text item delimiters to oldDelims return aList end FlattenList |
リスト項目のシャッフル(ASOC)
AppleScript名:リスト項目のシャッフル(ASOC) |
— Created 2016-12-06 by Takaaki Naganoya — 2016 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "ArrayRandomize" –https://github.com/masakihirokawa/objc-classes-dc-randomize –http://piyocast.com/as/archives/4351 –配列をシャッフルして取得 set anArray to current application’s NSMutableArray’s alloc()’s initWithArray:{1, 2, 3, 4, 5} set bArray to (current application’s DCRandomize’s shuffleArray:anArray) as list –> {5, 3, 1, 2, 4} –1〜10の数値をシャッフルして配列取得 set cArray to (current application’s DCRandomize’s shuffle:1 max:10) as list –> {9, 4, 6, 5, 3, 2, 7, 8, 1, 10} –5〜10の範囲の乱数を取得 set dArray to (current application’s DCRandomize’s range:5 max:10) as integer –> 7 –5〜10の範囲で 9以外の乱数を取得 set eArray to (current application’s DCRandomize’s exact:5 max:10 exceptId:9) –> 9 |
GameplayKitを使ったリストのシャッフル
AppleScript名:GameplayKitを使ったリストのシャッフル |
— Created 2016-12-08 by Shane Stanley use AppleScript version "2.5" use framework "Foundation" use framework "GameplayKit" use scripting additions set anArray to current application’s NSArray’s arrayWithArray:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} set newArray to anArray’s shuffledArray() as list — requires macOS 10.12 |
和集合(union)v2
AppleScript名:和集合(union)v2 |
— Created 2017-02-24 by Takaaki Naganoya — Created 2017-03-01 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4491 set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4} set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7} aSet’s unionSet:bSet –和集合 aSet’s allObjects() as list –> {5, 1, 6, 2, 7, 3, 4} |
補集合(set difference)v2
AppleScript名:補集合(set difference)v2 |
— Created 2017-02-24 by Takaaki Naganoya — Created 2017-03-01 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4491 set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4} set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7} aSet’s minusSet:bSet –補集合 aSet’s allObjects() as list –> {2, 1, 4} |
積集合(product)v2
AppleScript名:積集合(product)v2 |
— Created 2017-02-24 by Takaaki Naganoya — Created 2017-03-01 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4491 set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4} set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7} aSet’s intersectSet:bSet –積集合 aSet’s allObjects() as list –> {3} |
文字を集合(CountedSet)に変換して文字列同士の近似度を計算する(単語単位で評価) v4
AppleScript名:文字を集合(CountedSet)に変換して文字列同士の近似度を計算する(単語単位で評価) v4 |
— Created 2017-03-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "This is a pinnapple." set bStr to "This is an apple." set cStr to "Piyomaru San Dayo." set aRes to stringDifferenceWithAppearance(aStr, bStr, "A & B") of me –> {intersect:2, minus:2, dataLabel:"A & B"} set bRes to stringDifferenceWithAppearance(bStr, cStr, "B & C") of me –> {intersect:0, minus:4, dataLabel:"B & C"} set cRes to stringDifferenceWithAppearance(cStr, aStr, "C & A") of me –> {intersect:0, minus:3, dataLabel:"C & A"} –結果をソートする set allRes to current application’s NSArray’s arrayWithArray:{aRes, bRes, cRes} set aSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"intersect" ascending:false set bSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"minus" ascending:true set aSortedArray to allRes’s sortedArrayUsingDescriptors:{aSortDesc, bSortDesc} –もっとも似ている傾向を持つデータの組み合わせ set aMostApproximative to aSortedArray’s firstObject() as record –> {minus:2, dataLabel:"A & B", intersect:2} –文字列同士の近似傾向を、相違点と重複箇所の2つの方向から計算する on stringDifferenceWithAppearance(aStr, bStr, aLabel) set aMinus to getApproximationBetweenStrings(aStr, bStr) of me set aIntersect to getApproximationBetweenStringsIntersect(aStr, bStr) of me return {intersect:aIntersect, minus:aMinus, dataLabel:aLabel} end stringDifferenceWithAppearance –与えられた文字列同士の相違点を計算する(結果がより小さい値のデータ同士が似ている) on getApproximationBetweenStrings(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(words of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(words of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s minusSet:bIndex set aRes to aIndex’s allObjects()’s |count|() bIndex’s minusSet:aIndex set bRes to bIndex’s allObjects()’s |count|() if aRes ≥ bRes then return bRes else return aRes end if end getApproximationBetweenStrings –与えられた文字列同士の重複箇所を計算する(結果がより大きい値のデータ同士が似ている) on getApproximationBetweenStringsIntersect(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(words of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(words of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s intersectSet:bIndex set aRes to aIndex’s allObjects()’s |count|() return aRes end getApproximationBetweenStringsIntersect |
文字を集合(CountedSet)に変換して文字列同士の近似度を計算する v3
AppleScript名:文字を集合(CountedSet)に変換して文字列同士の近似度を計算する v3 |
— Created 2017-03-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "This is a pinnapple." set bStr to "This is an apple." set cStr to "Piyomaru San Dayo." set aRes to stringDifferenceWithAppearance(aStr, bStr, "A & B") of me –> {intersect:11, minus:3} set bRes to stringDifferenceWithAppearance(bStr, cStr, "B & C") of me –> {intersect:5, minus:8} set cRes to stringDifferenceWithAppearance(cStr, aStr, "C & A") of me –> {intersect:5, minus:9} –結果をソートする set allRes to current application’s NSArray’s arrayWithArray:{aRes, bRes, cRes} set aSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"intersect" ascending:false set bSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"minus" ascending:true set aSortedArray to allRes’s sortedArrayUsingDescriptors:{aSortDesc, bSortDesc} –もっとも似ている傾向を持つデータの組み合わせ set aMostApproximative to aSortedArray’s firstObject() as record –> {minus:3, dataLabel:"A & B", intersect:11} –文字列同士の近似傾向を、相違点と重複箇所の2つの方向から計算する on stringDifferenceWithAppearance(aStr, bStr, aLabel) set aMinus to getApproximationBetweenStrings(aStr, bStr) of me set aIntersect to getApproximationBetweenStringsIntersect(aStr, bStr) of me return {intersect:aIntersect, minus:aMinus, dataLabel:aLabel} end stringDifferenceWithAppearance –与えられた文字列同士の相違点を計算する(結果がより小さい値のデータ同士が似ている) on getApproximationBetweenStrings(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(characters of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(characters of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s minusSet:bIndex set aRes to aIndex’s allObjects()’s |count|() bIndex’s minusSet:aIndex set bRes to bIndex’s allObjects()’s |count|() if aRes ≥ bRes then return bRes else return aRes end if end getApproximationBetweenStrings –与えられた文字列同士の重複箇所を計算する(結果がより大きい値のデータ同士が似ている) on getApproximationBetweenStringsIntersect(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(characters of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(characters of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s intersectSet:bIndex set aRes to aIndex’s allObjects()’s |count|() return aRes end getApproximationBetweenStringsIntersect |
配列から要素を削除する(要素をインデックスで指定)
AppleScript名:配列から要素を削除する(要素をインデックスで指定) |
— Created 2017-02-24 11:37:14 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –要素を削除する(要素をインデックスで指定) set cMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) cMuta’s removeObjectAtIndex:2 cMuta –> (NSArray) {1, 2} |
配列の要素を削除する(範囲を指定)
AppleScript名:配列の要素を削除する(範囲を指定) |
— Created 2017-02-24 11:37:55 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –要素を削除する(範囲を指定) set dMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) dMuta’s removeObjectsInRange:(current application’s NSMakeRange(0, 1)) dMuta –> (NSArray) {2, 3} |
配列の要素をすべて削除する
AppleScript名:配列の要素をすべて削除する |
— Created 2017-02-24 11:38:17 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –要素をすべて削除する set eMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) eMuta’s removeAllObjects() eMuta –> (NSArray) {} |
配列の最後の要素を削除する
AppleScript名:配列の最後の要素を削除する |
— Created 2017-02-24 11:38:39 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –最後の要素を削除する set fMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) fMuta’s removeLastObject() fMuta –> (NSArray) {1, 2} |
配列の最初の要素を削除する
AppleScript名:配列の最初の要素を削除する |
— Created 2017-02-24 11:38:58 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –最初の要素を削除する set gMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) gMuta’s removeFirstObject() gMuta –> (NSArray) {2, 3} |
配列の指定要素を削除する
AppleScript名:配列の指定要素を削除する |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –Chapter 6 Lib.asobjcex3doc set theList to {5, 2, 9, 4, 2, 6, 3} set bList to my deleteItem:2 fromList:theList –> {5, 9, 4, 6, 3} set cList to deleteItem of me by 2 from theList –> {5, 9, 4, 6, 3} set dList to deleteItemBy(2, theList) of me –> {5, 9, 4, 6, 3} –Objective-Cライクなパラメータ記述 on deleteItem:anItem fromList:theList set theArray to current application’s NSMutableArray’s arrayWithArray:theList theArray’s removeObject:anItem return theArray as list end deleteItem:fromList: –無意味句による装飾 on deleteItem by anItem from theList set aRes to my deleteItem:anItem fromList:theList return aRes end deleteItem –Pure AS風のパラメータ記述 on deleteItemBy(anItem, theList) set aRes to my deleteItem:anItem fromList:theList return aRes end deleteItemBy |
配列から要素を削除する(要素をインデックスで指定)v2
AppleScript名:配列から要素を削除する(要素をインデックスで指定)v2 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –Chapter 6 Lib.asobjcex3doc set theList to {1, 2, 3, 4, 5, 6, 7, 8, 9} set bList to my deleteItemsAtIndexes:{3, 5, 7, 1} fromList:theList –> {2, 4, 6, 8, 9} set bList2 to deleteItems of me by {3, 5, 7, 1} from theList –> {2, 4, 6, 8, 9} set bList3 to deleteItemsBy({3, 5, 7, 1}, theList) of me –> {2, 4, 6, 8, 9} –Objective-Cライクなパラメータ記述 on deleteItemsAtIndexes:theIndexes fromList:theList set theArray to current application’s NSMutableArray’s arrayWithArray:theList set theSet to current application’s NSMutableIndexSet’s indexSet() repeat with anIndex in theIndexes (theSet’s addIndex:(anIndex – 1)) end repeat theArray’s removeObjectsAtIndexes:theSet return theArray as list end deleteItemsAtIndexes:fromList: –無意味区による装飾 on deleteItems by theIndexes from theList set aList to my deleteItemsAtIndexes:theIndexes fromList:theList return aList end deleteItems –Pure AS風のパラメータ記述 on deleteItemsBy(theIndexes, theList) set aList to my deleteItemsAtIndexes:theIndexes fromList:theList return aList end deleteItemsBy |
配列の複数の要素を取得する
配列(AppleScriptではlist(リスト)と呼ぶ)のうち、複数の要素を取得するAppleScriptです。
AppleScriptでは、配列の要素番号は1からはじまります。0番目の要素というのはありません。
set aList to {1, 2, 3, 4, 5}
set bList to items 1 thru 3 of aList
–> {1, 2, 3}
★Click Here to Open This Script
対して、CocoaのNSArray / NSMutableArrayでは、配列の要素番号は0からはじまります。AppleScriptからCocoaのNSArrayを用いる場合には、要素番号の指定基準が異なることに注意が必要です。
AppleScript名:配列の複数の要素を取得する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –複数の要素を取得する set anInd to current application’s NSIndexSet’s indexSetWithIndexesInRange:(current application’s NSMakeRange(1, 2)) –> (NSIndexSet) <NSIndexSet: 0x600000431140>[number of indexes: 2 (in 1 ranges), indexes: (1-2)] set aRes to anArray’s objectsAtIndexes:anInd –> (NSArray) {2, 3} |
配列の要素を順番に取得する
AppleScript名:配列の要素を順番に取得する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –要素を順番に取得する set anEnum to anArray’s objectEnumerator() –> (__NSFastEnumerationEnumerator) <__NSFastEnumerationEnumerator: 0x6000002c1180> repeat set aValue to anEnum’s nextObject() if aValue = missing value then exit repeat log aValue end repeat |