AppleScript名:縦書きリストの縦行がすべて空白であったら縦行を削除 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {{" ", "対", "i", "う", "テ"}, {" ", "応", "p", "A", "キ"}, {" ", "バ", "t", "p", "ス"}, {" ", "︱", "の", "p", "ト"}, {" ", "ジ", "﹁", "l", "縦"}, {" ", "ョ", "禁", "e", "書"}, {" ", "ン", "則", "S", "き"}, {" ", "で", "処", "c", "を"}, {" ", "す", "理", "r", "行"}, {" ", "︒", "﹂", " ", " "}} set bList to checkBlankVerticalLine(aList, " ") of me on checkBlankVerticalLine(aList, aBlankChar) set tLen to length of (item 1 of aList) copy aList to bList set hitList to makeRepeatinglList(length of bList, true) of me set aCount to 1 repeat set workList to {} repeat with ii in bList set jj to contents of ii set the end of workList to (item aCount of jj = aBlankChar) end repeat if workList = hitList then repeat with ii from 1 to length of bList set jj to contents of item ii of bList set item ii of bList to removeItemInArray(jj, 1) of me end repeat set tLen to tLen – 1 end if set aCount to aCount + 1 if aCount > tLen then exit repeat end if end repeat return bList end checkBlankVerticalLine on removeItemInArray(aList as list, anItemNo as integer) set anArray to current application’s NSMutableArray’s arrayWithArray:aList anArray’s removeObjectAtIndex:(anItemNo – 1) return anArray as list end removeItemInArray on makeRepeatinglList(hitNum, hitItem) set outList to {} repeat hitNum times set the end of outList to hitItem end repeat return outList end makeRepeatinglList |
タグ: 10.12savvy
1D Listを文字列長でソート v3
AppleScript名:1D Listを文字列長でソート v3 |
— Created 2014-11-25 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {"Apple", "Orange", "Banana", "Meron", "Strawberry", "Lemon", "Takaaki Naganoya", "Piyomaru Software"} set bList to sort1DListByStringLength(aList as list, true) of me –昇順 –> {"Apple", "Lemon", "Meron", "Banana", "Orange", "Strawberry", "Takaaki Naganoya", "Piyomaru Software"} set cList to sort1DListByStringLength(aList as list, false) of me –降順 –> {"Piyomaru Software", "Takaaki Naganoya", "Strawberry", "Banana", "Orange", "Apple", "Lemon", "Meron"} –1D Listを文字列長でソート v2 on sort1DListByStringLength(aList as list, sortOrder as boolean) set aArray to current application’s NSArray’s arrayWithArray:aList set desc1 to current application’s NSSortDescriptor’s sortDescriptorWithKey:"length" ascending:sortOrder set desc2 to current application’s NSSortDescriptor’s sortDescriptorWithKey:"self" ascending:true selector:"localizedCaseInsensitiveCompare:" set bArray to aArray’s sortedArrayUsingDescriptors:{desc1, desc2} return bArray as list of string or string end sort1DListByStringLength |
配列をソートする(1D)
AppleScript名:配列をソートする(1D) |
— 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 sortRes1 to anArray’s sortedArrayUsingSelector:"compare:" –逆順の場合には、sortDescriptorを指定する必要がある –> (NSArray) {1, 2, 3} –compare: –caseInsensitiveCompare: –localizedCompare: –localizedCaseInsensitiveCompare: –localizedStandardCompare: |
1Dリスト中の最も近い値を返す
AppleScript名:1Dリスト中の最も近い値を返す |
— Created 2017-11-11 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4971 property NSArray : a reference to current application’s NSArray set aList to {50, 30, 20, 15, 10, 5, 0} set targNum to retNearestNumInList(7, aList) of me –> 5 set targNum to retNearestNumInList(100, aList) of me –> 50 on retNearestNumInList(aNum, aList as list) set anNSArray to NSArray’s arrayWithArray:aList set bList to (anNSArray’s sortedArrayUsingSelector:"compare:") as list set aPreNum to 0 repeat with i in bList set j to contents of i if j ≥ aNum then exit repeat end if set aPreNum to j end repeat return aPreNum end retNearestNumInList |
範囲指定して配列を作成 v1.1a
AppleScript名:範囲指定して配列を作成 v1.1a |
— Created 2017-10-30 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use aBplus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html load framework set aindexSet to current application’s NSIndexSet’s indexSetWithIndexesInRange:(current application’s NSMakeRange(5, 100)) set aList to (current application’s SMSForder’s arrayWithIndexSet:aindexSet) as list –> {5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104} |
連番数値リスト中で欠落アイテム(Gap)を抽出 v2
AppleScript名:連番数値リスト中で欠落アイテム(Gap)を抽出 v2 |
— Created 2017-12-06 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use bPlus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html 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 load framework set aList to {1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20} set aRes to calcGaps(aList) of me –> {19, 13} on calcGaps(aList as list) set nArray to (NSMutableArray’s arrayWithArray:aList) 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 calcGaps |
隣接Rangeの検出じっけん
AppleScript名:隣接Rangeの検出じっけん |
— Created 2017-12-12 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aRange to current application’s NSMakeRange(10, 80) –original range set bRange to current application’s NSMakeRange(9, 81) –entended range (to detect neighbor) set cRange to current application’s NSMakeRange(89, 30) –target range set aRes to current application’s NSIntersectionRange(bRange, cRange) |
NSRangeの基礎的な処理
AppleScript名:NSRangeの基礎的な処理 |
— Created 2017-12-12 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aRange to current application’s NSMakeRange(0, 100) –> {location:0, length:100} set maxRange to current application’s NSMaxRange(aRange) –最大値 –> 100 set rangeStr to (current application’s NSStringFromRange(aRange)) as string –> "{0, 100}" set bRange to current application’s NSRangeFromString(rangeStr) –> {location:0, length:100} set cRange to current application’s NSMakeRange(50, 80) set cRes to current application’s NSEqualRanges(aRange, cRange) –> false set dRes to current application’s NSEqualRanges(aRange, bRange) –> true set eRes to current application’s NSIntersectionRange(aRange, cRange) –> {location:50, length:50} set fRes to current application’s NSLocationInRange(50, aRange) –> true set gRes to current application’s NSLocationInRange(120, aRange) –> false set hRes to current application’s NSUnionRange(aRange, cRange) –> {location:0, length:130} |
NSRangeの拡張、隣接検出
AppleScript名:NSRangeの拡張、隣接検出 |
— Created 2018-1-12 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/5118 set aRange to current application’s NSMakeRange(10, 80) –original range –> {location:10, |length|:80} set bRange to extendRange(aRange) of me –Extended range –> {location:9, |length|:81} set cRange to current application’s NSMakeRange(90, 30) –compare target range –> {location:90, |length|:30} set aRes to current application’s NSIntersectionRange(aRange, cRange) –> {location:0, |length|:0}–Not adjacent set bRes to current application’s NSIntersectionRange(bRange, cRange) –> {location:90, |length|:1}–Adjacent –NSRangeの開始点とサイズを拡張 on extendRange(aRange) set aLoc to location of aRange set aLen to |length| of aRange if aLoc > 0 then set aLoc to aLoc – 1 end if set aLen to aLen + 2 set bRange to current application’s NSMakeRange(aLoc, aLen) return bRange end extendRange |
MaxRangeを取得する
AppleScript名:MaxRangeを取得する |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aRange to current application’s NSMakeRange(10, 80) –original range set aMaxX to current application’s NSMaxRange(aRange) –> 90 –set aMinX to current application’s NSMinRange(aRange)–最小はない |
Markdown書類から見出し(Header)行を抽出_v2
Markdown書類を選択し、正規表現で見出し(Header)行を抽出するAppleScriptです。
# Header Level 1 ## Header Level 2 ### Header Level 3 #### Header Level 4
のようなデータを処理すると、
{{1, " Header Level 1"}, {2, " Header Level 2"}, {3, " Header Level 3"}, {4, " Header Level 4"}}
のように {{level number, “header text”}…} と結果を出力します。
AppleScript名:Markdown書類から見出し(Header)行を抽出_v2 |
— Created 2017-08-12 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4776 property NSRegularExpressionDotMatchesLineSeparators : a reference to current application’s NSRegularExpressionDotMatchesLineSeparators property NSRegularExpressionAnchorsMatchLines : a reference to current application’s NSRegularExpressionAnchorsMatchLines property NSRegularExpression : a reference to current application’s NSRegularExpression property NSString : a reference to current application’s NSString set aFile to choose file of type {"net.daringfireball.markdown"} –Markdown書類のUTI set aStr to (read aFile as «class utf8») set aList to retHeaders(aStr) of me –> {{3, "choose file, choose folderで選んだ対象の名称変更"}, {3, "choose folderで選んだフォルダ内のファイルの名称変更"}, {3, "Finder上で選んだ(selection)ファイルの名称変更"}, {3, "POSIX pathのファイルの名称変更"}, {3, "ファイルを移動させたうえで名称変更"}, {3, "要注意事項(超重要、生死にかかわる)"}} on retHeaders(aCon) set tList to {} set regStr to "^#{1,6}[^#]*?$" set headerList to my findPattern:regStr inString:aCon repeat with i in headerList set j to contents of i set regStr2 to "^#{1,6}[^#]*?" set headerLevel to length of first item of (my findPattern:regStr2 inString:j) set the end of tList to {headerLevel, text (headerLevel + 1) thru -1 in j} end repeat return tList end retHeaders 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 — so we can loop through set theResult to {} — we will add to this set theNSString to NSString’s stringWithString:theString repeat with i from 1 to count of items of theFinds set theRange to (item i of theFinds)’s range() set end of theResult to (theNSString’s substringWithRange:theRange) as string end repeat return theResult end findPattern:inString: |
MacDownで編集中のMarkDown書類で見出しが見出し落ちしていないかチェック
MacDownで編集中のMarkdown書類をいったんデスクトップにPDF書き出しして、見出しがページ末尾に位置していないか(見出し落ち)をチェックするAppleScriptです。
MacDownのAppleScript対応機能が少ないので、ほとんどAppleScriptだけで処理しています。Cocoaの機能を呼べるようになったので、とくに問題ありません。
MacDownで編集中の最前面のMarkdown書類からパスを取得し、AppleScriptで直接ファイルから内容を読み込み、正規表現で見出し一覧を取得します。
MacDownからGUI Scripting経由でメニューをコントロールしてPDF書き出しを行い、ページ単位でPDFからテキストを抽出。不要な空白文字列などを削除。
▲いわゆる「見出し落ち」の状態。ページ末尾に見出し項目が存在している
各ページのテキストが見出しの内容で終了していれば、結果出力用の変数midashiOchiListに{ページ数, 見出し名称} を追加して出力します。
–> {{2, “対象となるFramework”}}
AppleScript名:MacDownで編集中のMarkDown書類で見出しが見出し落ちしていないかチェック |
— Created 2017-08-12 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" use framework "Quartz" property NSString : a reference to current application’s NSString property NSCharacterSet : a reference to current application’s NSCharacterSet 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 set docName to getFrontmostMarkdownDocName() of me if docName = false then return set newName to repFileNameExtension(docName, ".pdf") of me set newPath to (POSIX path of (path to desktop)) & newName set dRes to deleteItemAt(newPath) of me –前回実行時にデスクトップに残った同名のPDFを削除する –Markdownのソースを元ファイルから直接読み出す set docSourcePath to getFrontmostMarkdownFullPath() of me set aStr to (read (docSourcePath as alias) as «class utf8») –getHeader List set aList to retHeaders(aStr) of me –Export Markdown to PDF (desktop folder) macDownForceSave() of me set tList to textInPDFinEachPage(newPath) of me set pCount to 1 set midashOchiList to {} repeat with i in tList set j to (contents of i) as string repeat with ii in aList set jj to (contents of second item of ii) as string –set jj2 to replaceText(jj, "(", "(") of me –set jj3 to replaceText(jj2, ")", ")") of me if (j ends with jj) then set the end of midashOchiList to {pCount, jj} end if end repeat set pCount to pCount + 1 end repeat return midashOchiList on retHeaders(aCon) set tList to {} set regStr to "^#{1,6}[^#]*?$" set headerList to my findPattern:regStr inString:aCon repeat with i in headerList set j to contents of i set regStr2 to "^#{1,6}[^#]*?" set headerLevel to length of first item of (my findPattern:regStr2 inString:j) set tmpHeader1 to text (headerLevel + 1) thru -1 in j –ヘッダーの前後から空白文字をトリミング set tmpHeader2 to trimWhiteSpaceFromHeadAndTail(tmpHeader1) of me –ヘッダー部でPDF書き出ししたときに全角文字が半角文字に置換されてしまうケースに対処 set tmpHeader3 to replaceText(tmpHeader2, "(", "(") of me set tmpHeader4 to replaceText(tmpHeader3, ")", ")") of me set the end of tList to {headerLevel, tmpHeader4} end repeat return tList end retHeaders 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 — so we can loop through set theResult to {} — we will add to this set theNSString to NSString’s stringWithString:theString repeat with i from 1 to count of items of theFinds set theRange to (item i of theFinds)’s range() set end of theResult to (theNSString’s substringWithRange:theRange) as string end repeat return theResult end findPattern:inString: –指定文字列の前後から空白をトリミング on trimWhiteSpaceFromHeadAndTail(aStr as string) set aString to NSString’s stringWithString:aStr set bString to aString’s stringByTrimmingCharactersInSet:(NSCharacterSet’s whitespaceAndNewlineCharacterSet()) return bString as list of string or string –as anything end trimWhiteSpaceFromHeadAndTail –ファイル名の拡張子を置換する on repFileNameExtension(origName, newExt) set aName to current application’s NSString’s stringWithString:origName set theExtension to aName’s pathExtension() if (theExtension as string) is not equal to "" then set thePathNoExt to aName’s stringByDeletingPathExtension() set newName to (thePathNoExt’s stringByAppendingString:newExt) else set newName to (aName’s stringByAppendingString:newExt) end if return newName as string end repFileNameExtension on textInPDFinEachPage(thePath) set aList to {} set anNSURL to (current application’s |NSURL|’s fileURLWithPath:thePath) set theDoc to current application’s PDFDocument’s alloc()’s initWithURL:anNSURL set theCount to theDoc’s pageCount() as integer repeat with i from 1 to theCount set thePage to (theDoc’s pageAtIndex:(i – 1)) set curStr to (thePage’s |string|()) set curStr2 to curStr’s decomposedStringWithCanonicalMapping() –Normalize Text with NFC set targString to string id 13 & string id 10 & string id 32 & string id 65532 –Object Replacement Character set bStr to (curStr2’s stringByTrimmingCharactersInSet:(current application’s NSCharacterSet’s characterSetWithCharactersInString:targString)) set the end of aList to (bStr as string) end repeat return aList end textInPDFinEachPage –注意!! ここでGUI Scriptingを使用。バージョンが変わったときにメニュー階層などの変更があったら書き換え on macDownForceSave() activate application "MacDown" tell application "System Events" tell process "MacDown" — File > Export > PDF click menu item 2 of menu 1 of menu item 14 of menu 1 of menu bar item 3 of menu bar 1 –Go to Desktop Folder keystroke "d" using {command down} –Save Button on Sheet click button 1 of sheet 1 of window 1 end tell end tell end macDownForceSave on getFrontmostMarkdownDocName() tell application "MacDown" set dList to every document set dCount to count every item of dList if dCount is not equal to 1 then display notification "Markdown document is not only one." return false end if tell document 1 set docName to name end tell return docName end tell end getFrontmostMarkdownDocName on getFrontmostMarkdownFullPath() tell application "MacDown" tell document 1 set aProp to properties end tell end tell set aPath to (file of aProp) end getFrontmostMarkdownFullPath –任意のデータから特定の文字列を置換 on replaceText(origData, origText, repText) set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to {origText} set origData to text items of origData set AppleScript’s text item delimiters to {repText} set origData to origData as text set AppleScript’s text item delimiters to curDelim –set b to origData as text return origData end replaceText –指定のPOSIX pathのファイルを強制削除(あってもなくてもいい) on deleteItemAt(aPOSIXpath) set theNSFileManager to current application’s NSFileManager’s defaultManager() set theResult to theNSFileManager’s removeItemAtPath:(aPOSIXpath) |error|:(missing value) return (theResult as integer = 1) as boolean end deleteItemAt |
指定のMarkdown書類を走査して指定文字列(Question)をカウント
AppleScript名:指定のMarkdown書類を走査して指定文字列(Question)をカウント |
— Created 2017-11-14 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set origPath to (choose file of type {"net.daringfireball.markdown"} with prompt "処理対象のMarkdown書類を選択") set aText to (read origPath as «class utf8») set aFreq to retFrequency(aText, ">Q") of me –指定文字列内の指定キーワードの出現回数を取得する on retFrequency(origText, aKeyText) set aRes to parseByDelim(origText, aKeyText) of me return ((count every item of aRes) – 1) end retFrequency on parseByDelim(aData, aDelim) set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to aDelim set dList to text items of aData set AppleScript’s text item delimiters to curDelim return dList end parseByDelim |
listからHTML Tableの生成 v2
AppleScript名:listからHTML Tableの生成 v2 |
— Created 2017-02-24 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {{"1", "2", "3"}, {"3", "4", "5"}, {"5", "6", "7"}} set aHeader to "<html><head><title>First</title><style>table , td, table , tr, th{border:1px solid #333333;padding:2px;}</style></head><body><table ><tr><th>Col1</th><th>Col2</th><th>Col3</th><th>Col4</th><th>Col5</th></tr>" set aTable to "<tr><td>%@</td><td> </td><td>%@</td><td>%@</td><td>%@</td></tr>" set aFooter to "</table></body></html>" set aHTMLres to retTableHTML(aList, aHeader, aTable, aFooter) of me on retTableHTML(aList, aHeaderHTML, aTableHTML, aFooterHTML) set allHTML to current application’s NSMutableString’s stringWithString:aHeaderHTML set aCounter to 1 repeat with i in aList set j to contents of i set tmpList to (current application’s NSArray’s arrayWithArray:j) set aRowHTML to current application’s NSString’s stringWithFormat_(aTableHTML, (aCounter as string), tmpList’s objectAtIndex:0, tmpList’s objectAtIndex:1, tmpList’s objectAtIndex:2) (allHTML’s appendString:aRowHTML) set aCounter to aCounter + 1 end repeat (allHTML’s appendString:aFooterHTML) allHTML end retTableHTML |
指定のテキストからHTMLタグを除去(NSScanner)
AppleScript名:指定のテキストからHTMLタグを除去(NSScanner) |
— Created 2016-12-12 by Shane Stanley — Modified 2016-12-14 by edama2 — Modified 2017-11-28 by Takaaki Naganoya use AppleScript version "2.4" use scripting additions use framework "Foundation" –set aStr to read (choose file) set aStr to "<a>repeat</a>~end repeat<BR>" set aRes to (trimStrFromTo(aStr, "<", ">") of me) –> "repeat~end repeat" on trimStrFromTo(aParamStr, fromStr, toStr) set theScanner to current application’s NSScanner’s scannerWithString:aParamStr set anArray to current application’s NSMutableArray’s array() repeat until (theScanner’s isAtEnd as boolean) set {theResult, theKey} to theScanner’s scanUpToString:fromStr intoString:(reference) theScanner’s scanString:fromStr intoString:(missing value) set {theResult, theValue} to theScanner’s scanUpToString:toStr intoString:(reference) if theValue is missing value then set theValue to "" theScanner’s scanString:toStr intoString:(missing value) anArray’s addObject:theValue end repeat if anArray’s |count|() = 0 then return aParamStr copy aParamStr to curStr repeat with i in (anArray as list) set curStr to repChar(curStr, fromStr & i & toStr, "") of me end repeat return curStr end trimStrFromTo on repChar(aStr, targStr, repStr) set aString to current application’s NSString’s stringWithString:aStr set bString to aString’s stringByReplacingOccurrencesOfString:targStr withString:repStr set cString to bString as string return cString end repChar |
ASOCでUUID文字列を取得する
AppleScript名:ASOCでUUID文字列を取得する |
— Created 2015-08-14 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aUUID to current application’s NSUUID’s UUID() –> (__NSConcreteUUID) <__NSConcreteUUID 0x7f87d814d000> 6737A4CD-D509-42F5-BD0C-DB894127424D set aStr to aUUID’s UUIDString() –> (NSString) "6737A4CD-D509-42F5-BD0C-DB894127424D" set bStr to aStr as text –> "6737A4CD-D509-42F5-BD0C-DB894127424D" |
伏字文字列を作成する v4
AppleScript名:伏字文字列を作成する v4 |
— Created 2015-09-09 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "これは秘密のInformationです。" –Alphabet & Numeric以外でも置換可能 set bStr to makeUnprintableChars(aStr) –> "xxxxxxXxxxxxxxxxxxx。" on makeUnprintableChars(aStr) set anNSString to current application’s NSString’s stringWithString:aStr set anNSString to anNSString’s stringByReplacingOccurrencesOfString:"[\\p{Lu}\\p{Lt}\\p{Nd}]" withString:"X" options:(current application’s NSRegularExpressionSearch) range:{0, anNSString’s |length|()} set anNSString to anNSString’s stringByReplacingOccurrencesOfString:"[\\p{Ll}\\p{Lm}\\p{Lo}]" withString:"x" options:(current application’s NSRegularExpressionSearch) range:{0, anNSString’s |length|()} return anNSString as text end makeUnprintableChars |
ASOCでテキストを行ごとにparseしてNSArrayに
AppleScript名:ASOCでテキストを行ごとにparseしてNSArrayに |
— Created 2015-07-02 17:32:59 +0900 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aText to "ABCDE 01234 あいうえお かきくけこ さしすせそ たちつてと なにぬねの" set aArray to parseParagraphs(aText) of me set aRes to countArrayItems(aArray) of me –> 7 –最初のアイテム set bRes to retFirstObject(aArray) of me –> (NSString) "ABCDE" –最後のアイテム set cRes to retLastObject(aArray) of me –> (NSString) "なにぬねの" –指定アイテム目のアイテム set dRes to retNthObject(aArray, 2) of me –> (NSString) "01234" –テキストを改行でParseしてArrayに on parseParagraphs(a) set aStr to current application’s NSString’s stringWithString:a set retStr to current application’s NSString’s stringWithString:(string id 10) set aRes to (aStr’s componentsSeparatedByString:retStr) –parse strings by return return aRes end parseParagraphs –与えられた配列の要素数を返す on countArrayItems(aArray) set aRes to aArray’s |count|() return aRes end countArrayItems –与えられた配列の最初の要素を返す on retFirstObject(aArray) set a to aArray’s firstObject() return a end retFirstObject –与えられた配列の最後の要素を返す on retLastObject(aArray) set a to aArray’s lastObject() return a end retLastObject –与えられた配列の指定アイテム目の要素を返す on retNthObject(aArray, nTh) if nTh ≤ 0 then return false set aIndex to current application’s NSNumber’s numberWithInt:((nTh – 1) as integer) set aRes to aArray’s objectAtIndex:aIndex return aRes end retNthObject |
ASOCで文字を逆順に v2(CJK文字などマルチバイト対応)
AppleScript名:ASOCで文字を逆順に v2(CJK文字などマルチバイト対応) |
— Created 2015-09-01 by Takaaki Naganoya — Modified 2015-09-01 by Shane Stanley –Consider CJK Characters & Emoji –http://stackoverflow.com/questions/6720191/reverse-nsstring-text use AppleScript version "2.4" use scripting additions use framework "Foundation" set aUUID to (current application’s NSUUID’s UUID()’s UUIDString()) as text –> "46EF17B7-CB3E-4DD9-BA8A-013D3B30A80A" set aUUID to "😀😐" & aUUID & "😀😐" –> "😀😐46EF17B7-CB3E-4DD9-BA8A-013D3B30A80A😀😐" set revUUID to reversedStr(aUUID) as text –> "😐😀A08A03B3D310-A8AB-9DD4-E3BC-7B71FE64😐😀" on reversedStr(paramStr as text) set aStr to current application’s NSString’s stringWithString:paramStr set strLength to aStr’s |length|() set revStr to current application’s NSMutableString’s stringWithCapacity:strLength set charIndex to strLength – 1 repeat while charIndex > -1 set subStrRange to aStr’s rangeOfComposedCharacterSequenceAtIndex:charIndex revStr’s appendString:(aStr’s substringWithRange:subStrRange) set charIndex to (location of subStrRange) – 1 end repeat return revStr end reversedStr |
ASOCで文字列の長さを求める
AppleScript名:ASOCで文字列の長さを求める |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set a to current application’s NSMutableString’s stringWithString:"あいうえお" set b to a’s |length|() –> 5 |