AppleScript名:offset ofの高速実行 |
set aDate to current date repeat 100000 times set aStr to "abcdefghi" set aRes to offset of "c" in aStr end repeat set bDate to current date –結果表示 display dialog (bDate – aDate) as string –> 通常で5秒、offset ofをフックして自前のサブルーチンで実行すると2秒 –offset命令の実行を横取りする on offset of searchStr in str set aRes to getOffset(str, searchStr) of me return aRes end offset on getOffset(str, searchStr) set d to divideBy(str, searchStr) if (count d) is less than 2 then return 0 return (length of item 1 of d) + 1 end getOffset on divideBy(str, separator) set delSave to AppleScript’s text item delimiters set the AppleScript’s text item delimiters to separator set strItems to every text item of str set the AppleScript’s text item delimiters to delSave return strItems end divideBy |
タグ: 10.13savvy
文字列中に指定した文字列があるか検索する
AppleScript名:文字列中に指定した文字列があるか検索する |
— Created 2015-01-26 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aString to current application’s NSString’s stringWithString:"長野谷 隆昌" set aRange to aString’s rangeOfString:"隆" return aRange –>{location:4, length:1} if aRange’s location() = current application’s NSNotFound then current application’s NSLog("Not Found") else current application’s NSLog("Found") end if |
テキストの複数検索(ファイルから読み込んで検索)
AppleScript名:テキストの複数検索(ファイルから読み込んで検索) |
— Created 2017-08-09 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" property NSString : a reference to current application’s NSString property NSMutableArray : a reference to current application’s NSMutableArray property NSDate : a reference to current application’s NSDate property NSLiteralSearch : a reference to current application’s NSLiteralSearch set aFile to POSIX path of (choose file) set a1Dat to NSDate’s timeIntervalSinceReferenceDate() set aStr to NSString’s stringWithContentsOfFile:aFile encoding:(current application’s NSUTF8StringEncoding) |error|:(missing value) set aRes to searchWordRanges(aStr, "子供") of me as list –> {{location:1159, length:2}, {location:1242, length:2}, {location:1261, length:2}, ….. set b1Dat to NSDate’s timeIntervalSinceReferenceDate() set c1Dat to b1Dat – a1Dat on searchWordRanges(aTargText as string, aSearchStr as string) set aStr to NSString’s stringWithString:aTargText set bStr to NSString’s stringWithString:aSearchStr set hitArray to NSMutableArray’s alloc()’s init() set cNum to (aStr’s |length|()) as integer set aRange to current application’s NSMakeRange(0, cNum) repeat set detectedRange to aStr’s rangeOfString:bStr options:(NSLiteralSearch) range:aRange if detectedRange’s location is equal to current application’s NSNotFound then exit repeat hitArray’s addObject:detectedRange set aNum to (detectedRange’s location) as integer set bNum to (detectedRange’s |length|) as integer set aRange to current application’s NSMakeRange(aNum + bNum, cNum – (aNum + bNum)) end repeat return hitArray end searchWordRanges |
テキストのキーワード検索(結果をNSRangeのlistで返す)
AppleScript名:テキストのキーワード検索(結果をNSRangeのlistで返す) |
— Created 2017-08-09 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4771 property NSString : a reference to current application’s NSString property NSMutableArray : a reference to current application’s NSMutableArray property NSLiteralSearch : a reference to current application’s NSLiteralSearch set aStr to "ATGC ACGT ATGC AGTC ATGC ACGT ATGC AGTC ATGC ACGT ATGC AGTC ATGC ACGT ATGC AGTC " set aRes to searchWordRanges(aStr, "ATGC") of me as list –> {{location:0, length:4}, {location:10, length:4}, {location:20, length:4}, {location:30, length:4}, {location:40, length:4}, {location:50, length:4}, {location:60, length:4}, {location:70, length:4}} on searchWordRanges(aTargText as string, aSearchStr as string) set aStr to NSString’s stringWithString:aTargText set bStr to NSString’s stringWithString:aSearchStr set hitArray to NSMutableArray’s alloc()’s init() set cNum to (aStr’s |length|()) as integer set aRange to current application’s NSMakeRange(0, cNum) repeat set detectedRange to aStr’s rangeOfString:bStr options:(NSLiteralSearch) range:aRange if (detectedRange’s location) is equal to (current application’s NSNotFound) then exit repeat hitArray’s addObject:detectedRange set aNum to (detectedRange’s location) as integer set bNum to (detectedRange’s |length|) as integer set aRange to current application’s NSMakeRange(aNum + bNum, cNum – (aNum + bNum)) end repeat return hitArray end searchWordRanges |
テキストからリガチャーを削除する v2
AppleScript名:テキストからリガチャーを削除する v2 |
— Created 2017-01-17 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set inputStringWithLigatures to "ꜲꜳÆæꜴꜵꜶꜷꜸꜹꜺꜻꜼꜽffffifflfiflŒœꝎstꜨꜩᵫꝠꝡ" & "LJLjNJNjnjDZDzdzIJij" set aRes to removeLigaturesFromString(inputStringWithLigatures) of me –> "AAaaAEaeAOaoAUauAVavAVavAYayffffifflfiflOEoeOOstTZtzueVYvyLJLjNJNjnjDZDzdzIJij" on removeLigaturesFromString(inputStringWithLigatures) set theString to current application’s NSString’s stringWithString:inputStringWithLigatures # Convert what may be done applying transform "ÆæffffifflfiflŒœᵫ" & "LJLjNJNjnjDZDzdzIJij" set inputStringWithLigatures to (theString’s stringByApplyingTransform:"Latin-ASCII" |reverse|:false) as text # Treat the remaining ligatures set searchStrings to {"Ꜳ", "ꜳ", "Ꜵ", "ꜵ", "Ꜷ", "ꜷ", "Ꜹ", "ꜹ", "Ꜻ", "ꜻ", "Ꜽ", "ꜽ", "Ꝏ", "Ꜩ", "ꜩ", "Ꝡ", "ꝡ"} — if you find others, add them here set replaceStrings to {"AA", "aa", "AO", "ao", "AU", "au", "AV", "av", "AV", "av", "AY", "ay", "OO", "TZ", "tz", "VY", "vy"} — if you find others, add them here set saveTID to AppleScript’s text item delimiters considering case set i to 0 repeat with lig in searchStrings set i to i + 1 set AppleScript’s text item delimiters to {lig} set inputStringWithLigatures to text items of inputStringWithLigatures set AppleScript’s text item delimiters to {item i of replaceStrings} set inputStringWithLigatures to inputStringWithLigatures as text end repeat end considering set AppleScript’s text item delimiters to saveTID return inputStringWithLigatures end removeLigaturesFromString |
文字置換 v2
指定文字列の中の文字(文字列)を置換するAppleScriptです。
Cocoaの機能を用いる方法よりも速く置換できます。文字置換に関してはこのルーチンが最速です。
Text Item Delimitersを使って文字置換を行うことに対して「納得できない」といった感想を持つ人もいるようですが、本ルーチンのように機能単位でカプセル化してしまえば、Text Item Delimitersを毎度毎度記述する必要はありません。実際に、自分も「Text Item Delimiters」をほとんどキーボードから入力したことはありません。
また、たまーに間違った使われ方を目にするのですが、本ルーチンは対象となるテキストを一括置換するので、「10箇所置換箇所があるから10回ループで回す必要がある」わけではありません。1回だけで全部置換できます。
本ルーチンよりもCocoa呼び出しの処理が高速になるのは、数10Kバイトを超える長大なテキストを処理する場合です。ちょっとした、256バイト以下の短い文字列を置換するような用途では本ルーチンで事足ります。
また、Cocoa系の文字置換ルーチンでは一部の特殊文字を置換できないので、そういう文字を置換する場合にも本ルーチンを使用します。
正規表現を用いる場合には、Cocoa系の文字置換処理を呼び出すのがよいでしょう。
AppleScript名:文字置換 v2 |
set a to repChar("thi^ is a ^", "^", "_") of me a –文字置換 on repChar(origText as string, targChar as string, repChar as string) set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to targChar set tmpList to text items of origText set AppleScript’s text item delimiters to repChar set retText to tmpList as string set AppleScript’s text item delimiters to curDelim return retText end repChar |
ASOCで文字置換5
AppleScript名:ASOCで文字置換5 |
— Created 2015-06-30 by Takaaki Naganoya use AppleScript version "2.4" use scripting additions use framework "Foundation" set a to "あいうえお++かきくけこ" set b to cleanUpText(a, "+", "●") –> "あいうえお●●かきくけこ" on cleanUpText(someText, targStr, repStr) set theString to current application’s NSString’s stringWithString:someText set targString to current application’s NSString’s stringWithString:targStr set repString to current application’s NSString’s stringWithString:repStr set theString to theString’s stringByReplacingOccurrencesOfString:targString withString:repString options:(current application’s NSRegularExpressionSearch) range:{location:0, |length|:length of someText} return theString as text end cleanUpText |
横書きテキストを縦書きに変換 v6
AppleScript名:横書きテキストを縦書きに変換 v6 |
— Created 2017-10-03 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4875 property NSArray : a reference to current application’s NSArray property NSString : a reference to current application’s NSString property NSStringTransformFullwidthToHalfwidth : a reference to current application’s NSStringTransformFullwidthToHalfwidth property NSMutableArray : a reference to current application’s NSMutableArray on run set lineMax to 9 set aText to "テキスト縦書きを行うAppleScriptの「禁則処理」および任意改行への対応バージョンです。" set sRes to makeTategakiStr(lineMax, aText) of me end run –縦行数を指定しつつ指定テキストを縦書き化 on makeTategakiStr(lineMax as integer, aText as string) set curMax to 0 set sList to paragraphs of aText –途中で強制改行が入っているケースに対処 set aList to {} repeat with i in sList set outList to strToTategakiList(lineMax, i) of me set the end of aList to outList end repeat set aList to kinsokuList2(aList) of me set curLen to length of aList set curMax to getMaxItemCountFrom2DArray(aList) of me set tmpList to {} set twoDList to make2DBlankArray(curLen, curMax) of me set curY to 1 repeat with x from 1 to curMax set curX to 1 repeat with y from curLen to 1 by -1 set aCon to getItemByXY(x, y, aList, " ") of me set twoDList to setItemByXY(curX, curY, twoDList, aCon as string) of me set curX to curX + 1 end repeat set curY to curY + 1 end repeat — set twoDList2 to checkBlankVerticalLine(twoDList, " ") set aRes to list2dToStringByUsingDelimiters(twoDList2, " ", return) of me set zRes to hanToZen(aRes) of me return zRes end makeTategakiStr –与えた文字列を縦書き2Dリストに変換 on strToTategakiList(lineMax as integer, aText as string) set zText to hanToZen(aText) of me set outList to {} set oneLine to {} set aCount to 1 set curMax to 0 repeat with i from 1 to (length of aText) set aChar to character i of aText set aChar to retTateChar(aChar) of me set the end of oneLine to aChar set aCount to aCount + 1 if aCount > lineMax then set aCount to 1 set the end of outList to oneLine set oneLine to {} end if end repeat if oneLine is not equal to {} then set the end of outList to oneLine end if return outList end strToTategakiList –半角→全角変換 on hanToZen(aStr as string) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformFullwidthToHalfwidth) |reverse|:true) as string end hanToZen –2D Listに配列の添字的なアクセスを行なってデータを取得 on getItemByXY(aX as integer, aY as integer, aList as list, aBlankItem) –1 based index try set aContents to contents of (item aX of item aY of aList) on error set aContents to aBlankItem end try return aContents end getItemByXY –2D Listに配列の添字的なアクセスを行なってデータを設定 on setItemByXY(aX as integer, aY as integer, tmpList as list, aContents) –1 based index set (item aX of item aY of tmpList) to aContents return tmpList end setItemByXY –空白の2D Array を出力する on make2DBlankArray(curLen as integer, curMax as integer) set outArray to {} repeat curMax times set tmpList to {} repeat curLen times set the end of tmpList to "" end repeat set the end of outArray to tmpList end repeat return outArray end make2DBlankArray –2D Listをアイテム間デリミタ、および行間デリミタを指定しつつテキスト化 on list2dToStringByUsingDelimiters(aList as list, itemDelimiter as string, lineDelimiter as string) set outList to {} repeat with i in aList set aStr to listToStringUsingTextItemDelimiter(i, itemDelimiter) of me set the end of outList to aStr end repeat return listToStringUsingTextItemDelimiter(outList, lineDelimiter) of me end list2dToStringByUsingDelimiters –1D Listをアイテム間デリミタ、および行間デリミタを指定しつつテキスト化 on listToStringUsingTextItemDelimiter(sourceList as list, textItemDelimiter as string) set anArray to NSArray’s arrayWithArray:sourceList return (anArray’s componentsJoinedByString:textItemDelimiter) as string end listToStringUsingTextItemDelimiter –2D Listの各要素のアイテム数のうち最多のものを返す on getMaxItemCountFrom2DArray(aList as list) set anArray to NSArray’s arrayWithArray:aList set bArray to (anArray’s valueForKeyPath:"@unionOfObjects.@count") return (bArray’s valueForKeyPath:"@max.self") as integer end getMaxItemCountFrom2DArray –特殊文字の横書き用から縦書き用への置き換え on retTateChar(aChar as string) if aChar = "<" then return "︿" if aChar = ">" then return "﹀" — if aChar = "《" then return "︽" if aChar = "》" then return "︾" — if aChar = "「" then return "﹁" if aChar = "」" then return "﹂" — if aChar = "『" then return "﹃" if aChar = "』" then return "﹄" — if aChar = "【" then return "︻" if aChar = "】" then return "︼" — if aChar = "[" then return "﹇" if aChar = "]" then return "﹈" — if aChar = "{" then return "︷" if aChar = "}" then return "︸" — if aChar = "(" then return "︵" if aChar = ")" then return "︶" — if aChar = "、" then return "︑" if aChar = "。" then return "︒" if aChar = "ー" then return "︱" if aChar = "~" then return "⌇" if aChar = "=" then return "‖" — if aChar = "1" then return "一" if aChar = "2" then return "二" if aChar = "3" then return "三" if aChar = "4" then return "四" if aChar = "5" then return "五" if aChar = "6" then return "六" if aChar = "7" then return "七" if aChar = "8" then return "八" if aChar = "9" then return "九" if aChar = "0" then return "〇" return aChar end retTateChar –とりあえずな禁則処理(任意改行を考慮し、2D Listでデータを受け取る) on kinsokuList2(toDList as list) set kinsokuCharList to {"︒", "︑", "﹁", "﹂", "﹃", "﹄", "︻", "︼", "﹇", "﹈", "︷", "︸", "︵", "︶", "︱", "⌇", "ァ", "ィ", "ゥ", "ェ", "ォ", "ョ", "ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ょ"} set outList to {} repeat with ii in toDList set aList to contents of ii set aLen to length of aList set startNum to 2 repeat set chgF to false repeat with i from startNum to aLen try set aChar to contents of first item of item i of aList on error –ちょっと強引、、、 exit repeat end try considering case and diacriticals –超重要!! if aChar is in kinsokuCharList then –行頭に禁則文字が入っていたら、前の行に追い出す set the end of item (i – 1) of aList to aChar set tmpList to contents of item i of aList set item i of aList to removeItemInArray(tmpList, 1) of me –リフロー処理 –repeat with refI from (i + ((i < aLen) as integer)) to aLen repeat with refI from (i + 1) to aLen –現在行の先頭の文字を取得 set aaChar to first item of item refI of aList –前行の末尾に追加 set the end of item (refI – 1) of aList to aaChar –現在行の先頭の文字を削除 set tmpList to contents of item refI of aList set item refI of aList to removeItemInArray(tmpList, 1) of me end repeat if chgF = false then set chgF to true copy (i + ((aLen > i) as integer)) to startNum end if end if end considering –超重要!! end repeat if chgF = false then exit repeat end repeat set outList to outList & aList end repeat return outList end kinsokuList2 on removeItemInArray(aList as list, anItemNo as integer) set anArray to NSMutableArray’s arrayWithArray:aList anArray’s removeObjectAtIndex:(anItemNo – 1) return anArray as list end removeItemInArray on offsetOf(aList as list, aTarg) set aArray to NSArray’s arrayWithArray:aList set aIndex to aArray’s indexOfObjectIdenticalTo:aTarg return ((aIndex as integer) + 1) end offsetOf –縦方向に空白行が存在していたら削除、末尾からスキャン on checkBlankVerticalLine(aList as list, aBlankChar as string) 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 –縦方向に1行分、すべて空白文字かどうかチェック 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 –縦方向に1行空白だったら、1行分の削除を行う 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 makeRepeatinglList(hitNum as integer, hitItem) set outList to {} repeat hitNum times set the end of outList to hitItem end repeat return outList end makeRepeatinglList |
セリフの文章のみを抽出する v1
AppleScript名:セリフの文章のみを抽出する v1 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set sourcePath to choose file tell current application set aStr to (read sourcePath as «class utf8») end tell findPatternAndReturnRanges("^「.{3,90}」$", aStr, false) of me on replaceString(thePattern, theString, theTemplate) set theOptions to ((current application’s NSRegularExpressionDotMatchesLineSeparators) as integer) + ((current application’s NSRegularExpressionAnchorsMatchLines) as integer) set theRegEx to current application’s NSRegularExpression’s regularExpressionWithPattern:thePattern options:theOptions |error|:(missing value) set theResult to theRegEx’s stringByReplacingMatchesInString:theString options:0 range:{location:0, |length|:length of theString} withTemplate:theTemplate return theResult as text end replaceString on findPatternAndReturnRanges(thePattern, theString, rangeFlag) set theOptions to ((current application’s NSRegularExpressionDotMatchesLineSeparators) as integer) + ((current application’s NSRegularExpressionAnchorsMatchLines) as integer) set theRegEx to current application’s 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 log {"Found Number:", length of theFinds} set theResult to {} — we will add to this set theNSString to current application’s NSString’s stringWithString:theString repeat with i from 1 to count of items of theFinds set theRange to (item i of theFinds)’s range() if rangeFlag = true then set end of theResult to theRange else set foundStr to (theNSString’s substringWithRange:theRange) as string set end of theResult to foundStr log {"Found String:", foundStr} end if end repeat return theResult end findPatternAndReturnRanges on findPattern:thePattern inString:theString capturing:n set theOptions to ((current application’s NSRegularExpressionDotMatchesLineSeparators) as integer) + ((current application’s NSRegularExpressionAnchorsMatchLines) as integer) set theRegEx to current application’s 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 current application’s NSString’s stringWithString:theString repeat with i from 1 to count of items of theFinds set oneFind to (item i of theFinds) if (oneFind’s numberOfRanges()) as integer < (n + 1) then set end of theResult to missing value else set theRange to (oneFind’s rangeAtIndex:n) set end of theResult to (theNSString’s substringWithRange:theRange) as string end if end repeat return theResult end findPattern:inString:capturing: |
shellの出力結果をスペースでparseする
AppleScript名:shellの出力結果をスペースでparseする |
— Created 2016-03-11 by Takaaki Naganoya — 2016 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set a to "3 0x4248387 1920×1200 0 0 -1920 -1200 0 [main]" set aStr to (current application’s NSString’s stringWithString:a) –> (NSString) "3 0x4248387 1920×1200 0 0 -1920 -1200 0 [main]" set aLine to (aStr’s componentsSeparatedByString:" ") –> (NSArray) {"3", "", "0x4248387", "", "", "", "", "1920×1200", "", "", "", "", "", "0", "", "", "", "", "0", "", "-1920", "", "-1200", "", "", "", "", "", "0", "", "", "", "[main]"} ( aLine’s removeObject:"")–> (NSArray) {"3", "0x4248387", "1920×1200", "0", "0", "-1920", "-1200", "0", "[main]"} set bList to aLine as list –> {"3", "0x4248387", "1920×1200", "0", "0", "-1920", "-1200", "0", "[main]"} |
&と=で区切られたテキストをrecordに(NSScanner 2)
AppleScript名:&と=で区切られたテキストをrecordに(NSScanner 2) |
— Created 2016-12-12 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" set aParamStr to "access_token=XXxxx(XXxXXXXXxxXxxXXx))&expires=86399" set aDict to (parseStrByAmpAndEqual(aParamStr) of me) as record –> {expires:"86399", access_token:"XXxxx(XXxXXXXXxxXxxXXx))"} on parseStrByAmpAndEqual(aParamStr) set theScanner to current application’s NSScanner’s scannerWithString:aParamStr log (theScanner’s scanLocation()) set aDict to current application’s NSMutableDictionary’s |dictionary|() repeat — terminate check, return the result (aDict) to caller set {theResult, theKey} to theScanner’s scanUpToString:"=" intoString:(reference) if theResult as boolean is false then return aDict log (theScanner’s scanLocation()) — skip over separator theScanner’s scanString:"=" intoString:(missing value) set {theResult, theValue} to theScanner’s scanUpToString:"&" intoString:(reference) log (theScanner’s scanLocation()) — skip over separator theScanner’s scanString:"&" intoString:(missing value) aDict’s setObject:theValue forKey:theKey log (theScanner’s scanLocation()) end repeat end parseStrByAmpAndEqual |
&と=で区切られたテキストをrecordに 改
AppleScript名:&と=で区切られたテキストをrecordに 改 |
— Created 2016-12-12 by Shane Stanley — Modified 2016-12-14 by edama2 use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4358 set aParamStr to "access_token=XXxxx(XXxXXXXXxxXxxXXx))&expires=86399&name=" set aDict to (parseStrByAmpAndEqual(aParamStr) of me) –> {expires:"86399", |name|:"", access_token:"XXxxx(XXxXXXXXxxXxxXXx))"} on parseStrByAmpAndEqual(aParamStr) set theScanner to current application’s NSScanner’s scannerWithString:aParamStr set aDict to current application’s NSMutableDictionary’s |dictionary|() repeat until (theScanner’s isAtEnd as boolean) — terminate check, return the result (aDict) to caller set {theResult, theKey} to theScanner’s scanUpToString:"=" intoString:(reference) — skip over separator theScanner’s scanString:"=" intoString:(missing value) set {theResult, theValue} to theScanner’s scanUpToString:"&" intoString:(reference) if theValue is missing value then set theValue to "" –>追加 — skip over separator theScanner’s scanString:"&" intoString:(missing value) aDict’s setObject:theValue forKey:theKey end repeat return aDict as record end parseStrByAmpAndEqual |
テキストの一部を取り出すじっけんASOC
AppleScript名:テキストの一部を取り出すじっけんASOC |
— Created 2017-10-12 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to current application’s NSString’s stringWithString:"0123456789" set aRes to (aStr’s substringToIndex:1) as string –> "0" set bRes to (aStr’s substringFromIndex:4) as string –> "456789" set cRes to (aStr’s substringWithRange:(current application’s NSMakeRange(3, 6))) as string –> "345678" |
文字列から開始文字列と終了文字列に囲まれた内容を削除
AppleScript名:文字列から開始文字列と終了文字列に囲まれた内容を削除 |
— Created 2016-12-12 by Shane Stanley — Modified 2016-12-14 by edama2 use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4358 set aStr to "thru (throughも可)" set aRes to (trimStrFromTo(aStr, "(", ")") of me) –> "thru " set bStr to "thru " set bRes to (trimStrFromTo(bStr, "(", ")") of me) –> "thru " 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) — terminate check, return the result (aDict) to caller set {theResult, theKey} to theScanner’s scanUpToString:fromStr intoString:(reference) — skip over separator 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 "" –>追加 — skip over separator 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 |
テキストを指定文字でparseする
AppleScript名:テキストを指定文字でparseする |
— Created 2018-02-03 20:21:16 +0900 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set a to current application’s NSString’s stringWithString:"4;1;2008-03-09 18:57:48;2008-03-09 09:57:48;" set b to a’s componentsSeparatedByString:";" –> (NSArray) {"4", "1", "2008-03-09 18:57:48", "2008-03-09 09:57:48", ""} |
与えられたテキストからフライト情報を抽出 v2
AppleScript名:与えられたテキストからフライト情報を抽出 v2 |
— Created 2015-08-21 by Shane Stanley — Modified 2015-08-21 by Takaaki Naganoya — Modified 2015-08-22 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" set theString to "UA460 SFO to YVR [Flight] 6/12/2013 United Airlines(UA) #460 dep SFO 7:57pm PDT arr YVR 10:14pm PDT; Ticket #0162360127882, Ticket #0162360127883; conf #K5XBXY; Note:, Seats:—/30A , Seats:—/30B " set theDates to (extractTransitInfoFromNaturalText(theString)) –> {{Flight:"460"}} on extractTransitInfoFromNaturalText(aString) set anNSString to current application’s NSString’s stringWithString:aString set {theDetector, theError} to current application’s NSDataDetector’s dataDetectorWithTypes:(current application’s NSTextCheckingTypeTransitInformation) |error|:(reference) set theMatches to theDetector’s matchesInString:anNSString options:0 range:{0, anNSString’s |length|()} set theResults to theMatches’s valueForKey:"components" return theResults as list end extractTransitInfoFromNaturalText |
与えられたテキストからdate objectを抽出 v2
AppleScript名:与えられたテキストからdate objectを抽出 v2 |
— Created 2015-08-21 by Shane Stanley — Modified 2015-08-22 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" use script "BridgePlus" set theString to "Sunny September 4 Fri., September 1 Fri. Sept. 2 Fri Sep 3 Sep. 4 Sept. 9 9/8 9/7/15 09/06/2015 9/5/2015 2015/9/5 2015年9月5日 2015年9月5日(土) 2015.9.5 " set theDates to ASify from (my getDatesIn:theString) –> {date "2015年9月4日金曜日 12:00:00", date "2015年9月1日火曜日 12:00:00", date "2015年9月2日水曜日 12:00:00", date "2015年9月3日木曜日 12:00:00", date "2015年9月4日金曜日 12:00:00", date "2015年9月9日水曜日 12:00:00", date "2009年7月15日水曜日 12:00:00", date "2015年9月6日日曜日 12:00:00", date "2015年9月5日土曜日 12:00:00", date "2015年9月5日土曜日 12:00:00", date "2015年9月5日土曜日 12:00:00", date "2015年9月5日土曜日 12:00:00"} on getDatesIn:aString set anNSString to current application’s NSString’s stringWithString:aString set {theDetector, theError} to current application’s NSDataDetector’s dataDetectorWithTypes:(current application’s NSTextCheckingTypeDate) |error|:(reference) set theMatches to theDetector’s matchesInString:anNSString options:0 range:{0, anNSString’s |length|()} set theResults to theMatches’s valueForKey:"date" return theResults as list end getDatesIn: |
与えられたテキストから電話番号を抽出 v2
AppleScript名:与えられたテキストから電話番号を抽出 v2 |
— Created 2015-08-21 by Shane Stanley — Modified 2015-08-21 by Takaaki Naganoya — Modified 2015-08-22 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" set theString to "長野谷隆昌 (Takaaki Naganoya) maro@piyocast.com http://piyocast.com/as 2015年8月21日〜23日 080-1111-2222 東京都練馬区中村橋1-2-3 " set theDates to (extractPhoneNumberFromNaturalText(theString)) –> {"080-1111-2222"} on extractPhoneNumberFromNaturalText(aString) set anNSString to current application’s NSString’s stringWithString:aString set {theDetector, theError} to current application’s NSDataDetector’s dataDetectorWithTypes:(current application’s NSTextCheckingTypePhoneNumber) |error|:(reference) set theMatches to theDetector’s matchesInString:anNSString options:0 range:{0, anNSString’s |length|()} set theResults to theMatches’s valueForKey:"phoneNumber" return theResults as list end extractPhoneNumberFromNaturalText |
与えられたテキストから住所を抽出 v2
AppleScript名:与えられたテキストから住所を抽出 v2 |
— Created 2015-08-21 by Shane Stanley — Modified 2015-08-21 by Takaaki Naganoya — Modified 2015-08-22 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" set theString to "長野谷隆昌 (Takaaki Naganoya) maro@piyocast.com http://piyocast.com/as 2015年8月21日〜23日 東京都練馬区中村橋1-2-3 " set theDates to (extractAddressFromNaturalText(theString)) –> {{State:"東京都", Street:"中村橋1-2-3", City:"練馬区"}} on extractAddressFromNaturalText(aString) set anNSString to current application’s NSString’s stringWithString:aString set {theDetector, theError} to current application’s NSDataDetector’s dataDetectorWithTypes:(current application’s NSTextCheckingTypeAddress) |error|:(reference) set theMatches to theDetector’s matchesInString:anNSString options:0 range:{0, anNSString’s |length|()} set theResults to theMatches’s valueForKey:"addressComponents" return theResults as list end extractAddressFromNaturalText |
与えられたテキストからリンクURLを抽出 v3
AppleScript名:与えられたテキストからリンクURLを抽出 v3 |
— Created 2015-08-21 by Shane Stanley — Modified 2015-08-21 by Takaaki Naganoya — Modified 2015-08-22 by Shane Stanley — Modified 2015-08-23 by Takaaki Naganoya use AppleScript version "2.4" use scripting additions use framework "Foundation" set theString to "長野谷隆昌 (Takaaki Naganoya) maro@piyocast.com http://piyocast.com/as 2015年8月21日〜23日 080-1111-2222 東京都練馬区中村橋1-2-3 " set resList to (extractLinksFromNaturalText(theString)) –> {(NSURL) mailto:maro@piyocast.com, (NSURL) http://piyocast.com/as} set bList to {} repeat with i in resList set the end of bList to (i’s absoluteString()) as text end repeat bList –> {"mailto:maro@piyocast.com", "http://piyocast.com/as"} on extractLinksFromNaturalText(aString) set anNSString to current application’s NSString’s stringWithString:aString set {theDetector, theError} to current application’s NSDataDetector’s dataDetectorWithTypes:(current application’s NSTextCheckingTypeLink) |error|:(reference) set theMatches to theDetector’s matchesInString:anNSString options:0 range:{0, anNSString’s |length|()} set theResults to theMatches’s valueForKey:"URL" return theResults as list end extractLinksFromNaturalText |