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 |
カテゴリー: Text
与えられたテキストから住所を抽出 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 |
与えられたテキストからメールアドレスを抽出する
AppleScript名:与えられたテキストからメールアドレスを抽出する |
— Created 2017-01-13 by Shane Stanley — Modified 2017-01-13 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aText to " — Takaaki Naganoya Piyomaru Software http://piyocast.com/as maro@piyocast.com " set aRes to findEmailAddressesIn(aText) of me –> {"maro@piyocast.com"} on findEmailAddressesIn(someString) set theDD to current application’s NSDataDetector’s dataDetectorWithTypes:(current application’s NSTextCheckingTypeLink) |error|:(missing value) set theURLs to theDD’s matchesInString:someString options:0 range:{location:0, |length|:length of someString} set thePredicate to current application’s NSPredicate’s predicateWithFormat:"self.URL.scheme == ’mailto’" set theURLs to theURLs’s filteredArrayUsingPredicate:thePredicate set theURLs to theURLs’s valueForKeyPath:"URL.resourceSpecifier" set theURLs to (current application’s NSSet’s setWithArray:theURLs)’s allObjects() return theURLs as list end findEmailAddressesIn |
ASOCで文字列を%エンコーディング文字列に変換する
AppleScript名:ASOCで文字列を%エンコーディング文字列に変換する |
use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aString to current application’s NSString’s stringWithString:"The time has come for all good “men”" set aString to (aString’s stringByAddingPercentEncodingWithAllowedCharacters:(current application’s NSCharacterSet’s URLQueryAllowedCharacterSet())) as text –> "The%20time%20has%20come%20for%20all%20good%20%E2%80%9Cmen%E2%80%9D" |
実体参照している文字列をデコードする(ASOC)
AppleScript名:実体参照している文字列をデコードする(ASOC) |
— Created 2017-01-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4568 set aStr to "龍馬伝" set aRes to decodeCharacterReference(aStr) of me –> "龍馬伝" set aStr to "\"第2エア\"" set aRes to decodeCharacterReference(aStr) of me –> "\"第2エア\"" on decodeCharacterReference(aStr) set anNSString to current application’s NSString’s stringWithString:aStr set theData to anNSString’s dataUsingEncoding:(current application’s NSUTF16StringEncoding) set styledString to current application’s NSAttributedString’s alloc()’s initWithHTML:theData documentAttributes:(missing value) set plainText to (styledString’s |string|()) as string return plainText end decodeCharacterReference |
指定文字コードでファイル書き出し(UTF-16LE)v2
AppleScript名:指定文字コードでファイル書き出し(UTF-16LE)v2 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "高島屋" set aPath to choose file name set cStr to current application’s NSString’s stringWithString:aStr set thePath to POSIX path of aPath set aRes to cStr’s writeToFile:thePath atomically:false encoding:(current application’s NSUTF16LittleEndianStringEncoding) |error|:(missing value) |
指定文字コードでファイル書き出し(UTF-16BE)v2
AppleScript名:指定文字コードでファイル書き出し(UTF-16BE)v2 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "高島屋" set aPath to choose file name set cStr to current application’s NSString’s stringWithString:aStr set thePath to POSIX path of aPath set aRes to cStr’s writeToFile:thePath atomically:false encoding:(current application’s NSUTF16BigEndianStringEncoding) |error|:(missing value) |
指定文字コードでファイル書き出し(SJIS)v2
AppleScript名:指定文字コードでファイル書き出し(SJIS)v2 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "高島屋" set aPath to choose file name set cStr to current application’s NSString’s stringWithString:aStr set thePath to POSIX path of aPath set aRes to cStr’s writeToFile:thePath atomically:false encoding:(current application’s NSShiftJISStringEncoding) |error|:(missing value) |
指定文字コードでファイル書き出し(UTF-16)v2
AppleScript名:指定文字コードでファイル書き出し(UTF-16)v2 |
— Created 2014-11-11 by Takaaki Naganoya — 2014 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "高島屋" set aPath to choose file name set cStr to current application’s NSString’s stringWithString:aStr set thePath to POSIX path of aPath set aRes to cStr’s writeToFile:thePath atomically:false encoding:(current application’s NSUnicodeStringEncoding) |error|:(missing value) |
指定文字コードでファイル書き出し(UTF-8)v2
AppleScriptの世界観では、文字コードというものは「存在しない」かのように位置付けています。2020年的な状況においてはUTF-8で事足りると言いたいところですが、(日本国内的には)100%そういうわけにも行きません。
AppleScriptのファイル書き出しコマンド(writeコマンド)では、UTF-8だけは文字コード指定のオプションが存在しています。ただし、ほぼ隠し仕様で生AppleEventコードを記述する必要があり、文字列で記述できる「予約語」が設けられているわけではありません。
予約語が存在していないといいつつ、やはり文字コードを指定できないのは不便だったこともあってか、予約語が存在していないものの、特定のファイル書き込み操作を行うと確実にその文字コードでファイル書き込みが行えるという「暗黙の文字コード指定」という手段が存在しています(macOS 10.8でここにバグを作られて大問題になりましたが、10.8.xで修正されました)。
しかし、macOS 10.10以降ではCocoaの機能を手軽に呼び出せるようになったために、状況が一変します。Cocoaの機能さえ呼び出せば、文字コード指定を行ってのファイルの書き出しも読み込みもお手の物。すでに、Cocoaの機能呼び出しのない世界は考えられないほど。なので、Cocoaの機能をAppleScriptネイティブの機能と位置づけ、Cocoaの機能を用いて文字コード指定を柔軟に行えるファイル入出力ルーチンが整備されています。
AppleScriptネイティブのwriteコマンドは、このCocoaの機能に影響を受けています。Cocoaの機能を利用する宣言文、
use framework "Foundation"
がある場合には、writeコマンドをそのまま記述できず(実行時にエラーになる)、tell current application〜end tellのブロック内に記述する必要が出てきます。そのため、掲載のファイル書き出しルーチンのプログラムリスト「UTF8でファイル書き込み」には、一見して無意味と思えるtell current application〜end tellが記述されています。ただ、対処方法がわかっているので使い回しを行うファイル書き出しルーチン側に本記述を書いておくことにしています。
正直なところ、文字コード指定をともなうファイル入出力については、Cocoaの機能を利用した方が手軽なので(AppleScriptのファイル追記モードは便利ですが)Cocoaの機能を使う方法だけ掲載しておけばよいと考えます。ごくまれに、古いバージョンのOS用にScriptを書かなくてはならないとか、Cocoa Scriptingを考慮していない偏屈なアプリケーションのScriptingで必要になることがある、程度のものでしょうか。
AppleScript名:指定文字コードでファイル書き出し(UTF-8)v2 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "高島屋" set aPath to choose file name set cStr to current application’s NSString’s stringWithString:aStr set thePath to POSIX path of aPath set aRes to cStr’s writeToFile:thePath atomically:false encoding:(current application’s NSUTF8StringEncoding) |error|:(missing value) |
AppleScript名:UTF8でファイル書き込み |
set dFol to (path to desktop) as string set fullPath to dFol & "test_utf8.txt" set aStr to "髙島屋" set fRes to writeToFileAsUTF8(aStr, fullPath, false) of me on writeToFileAsUTF8(thisData, targetFile, appendF as boolean) tell current application try set the targetFile to the targetFile as text set the openTargetFile to open for access file targetFile with write permission if appendF is false then set eof of the openTargetFile to 0 write thisData to the openTargetFile as «class utf8» starting at eof close access the openTargetFile return true on error try close access file targetFile end try return false end try end tell end writeToFileAsUTF8 |
指定文字コードでファイル書き出し(EUC)
AppleScript名:指定文字コードでファイル書き出し(EUC) |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "高島屋" set aPath to choose file name set cStr to current application’s NSString’s stringWithString:aStr set thePath to POSIX path of aPath set aRes to cStr’s writeToFile:thePath atomically:false encoding:(current application’s NSJapaneseEUCStringEncoding) |error|:(missing value) |
文字エンコーディングを自動判別してファイル読み込み v1.2.1
AppleScript名:文字エンコーディングを自動判別してファイル読み込み v1.2.1 |
— Created 2014-12-28 by Takaaki Naganoya — Modified 2014-12-29 by Shane Stanley — Modified 2015-10-03 by Takaaki Naganoya use AppleScript version "2.5" use scripting additions use framework "Foundation" set aPath to POSIX path of (choose file) set aRes to readJapanesTextFileWithGuessingEncoding(aPath) of me set bRes to aRes as string –Read Japanese text with detecting its text encoding on readJapanesTextFileWithGuessingEncoding(aPOSIXpath as string) –ISO2022JP check set aNSData to current application’s NSData’s dataWithContentsOfFile:aPOSIXpath set aDataLength to aNSData’s |length|() if aDataLength > 1024 then set aDataLength to 1024 –0x1B check set anNSString to current application’s NSString’s stringWithString:(character id 27) — 0x1B set theData to anNSString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding) set theRange to aNSData’s rangeOfData:theData options:0 range:(current application’s NSMakeRange(0, aDataLength)) –found 0x1B in aNSData if |length| of theRange = 1 and location of theRange < aDataLength then set aStr to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSISO2022JPStringEncoding)) –21 if aStr is not equal to missing value then return (aStr as text) — ISO2022JP end if –EUC set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSJapaneseEUCStringEncoding)) –log resValue if resValue is not equal to missing value then return (resValue as text) –UTF-8 set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSUTF8StringEncoding)) –log resValue if resValue is not equal to missing value then return (resValue as text) –SHift JIS set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSShiftJISStringEncoding)) –log resValue if resValue is not equal to missing value then return (resValue as text) –UTF-16BE/LE/無印Unicodeは多数決を取る set resValue1 to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSUTF16BigEndianStringEncoding)) as text –log resValue1 set sample1 to getTextSample(resValue1) of me set lang1 to specifyLanguageOfText(sample1) of me set para1 to length of (paragraphs of sample1) set words1 to length of (words of sample1) set resValue2 to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSUTF16LittleEndianStringEncoding)) as text –log resValue2 set sample2 to getTextSample(resValue2) of me set lang2 to specifyLanguageOfText(sample2) of me set para2 to length of (paragraphs of sample2) set words2 to length of (words of sample2) set resValue3 to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSUnicodeStringEncoding)) as text –log resValue3 set sample3 to getTextSample(resValue3) of me set lang3 to specifyLanguageOfText(sample3) of me set para3 to length of (paragraphs of sample3) set words3 to length of (words of sample3) –文字および文法的に見て「日本語」ならそれを返す if lang1 = "ja" then return resValue1 if lang2 = "ja" then return resValue2 if lang3 = "ja" then return resValue2 –文字化けしたときには、日本語の「Word」として認識されづらく、Paragraphも少ない(1とか)なので条件で除外する if para1 is not equal to 1 then if (words1 ≤ words2) or (words1 ≤ words3) then return resValue1 end if end if if para2 is not equal to 1 then if (words2 ≤ words1) or (words2 ≤ words3) then return resValue2 end if end if if para3 is not equal to 1 then if (words3 ≤ words1) or (words3 ≤ words2) then return resValue3 end if end if return false (* –おまけ(未確認) set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSWindowsCP1251StringEncoding)) if resValue is not equal to missing value then return resValue set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSWindowsCP1252StringEncoding)) if resValue is not equal to missing value then return resValue set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSWindowsCP1253StringEncoding)) if resValue is not equal to missing value then return resValue set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSWindowsCP1254StringEncoding)) if resValue is not equal to missing value then return resValue set resValue to (current application’s NSString’s alloc()’s initWithData:aNSData encoding:(current application’s NSWindowsCP1250StringEncoding)) if resValue is not equal to missing value then return resValue return false *) end readJapanesTextFileWithGuessingEncoding on specifyLanguageOfText(aStr) set aNSstring to current application’s NSString’s stringWithString:aStr set tagSchemes to current application’s NSArray’s arrayWithObjects:(current application’s NSLinguisticTagSchemeLanguage) set tagger to current application’s NSLinguisticTagger’s alloc()’s initWithTagSchemes:tagSchemes options:0 tagger’s setString:aNSstring set aLanguage to tagger’s tagAtIndex:0 |scheme|:(current application’s NSLinguisticTagSchemeLanguage) tokenRange:(missing value) sentenceRange:(missing value) return aLanguage as text end specifyLanguageOfText on getTextSample(aText) set aLen to length of aText if aLen < 1024 then set bLen to aLen else set bLen to 1024 end if return (text 1 thru bLen of aText) end getTextSample |
なろう系ルビタグを置換
AppleScript名:なろう系ルビタグを置換 |
— Created 2018-01-14 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/5117 property NSString : a reference to current application’s NSString property NSScanner : a reference to current application’s NSScanner property NSMutableArray : a reference to current application’s NSMutableArray property NSRegularExpressionSearch : a reference to current application’s NSRegularExpressionSearch property NSNumberFormatterRoundUp : a reference to current application’s NSNumberFormatterRoundUp set aStr to " 数多国ある西方諸国だが、元を辿ればとある一つの国へとつながっていた。それは幻晶騎士(シルエットナイト)の力により西方の地に覇をとなえた人類が作り上げた超巨大国家、その名を“ファダーアバーデン”という。 西方暦一二八九年の現在において西方諸国を構成する主要国家、“ジャロウデク王国”、“クシェペルカ王国”、“ロカール諸国連合”、“|孤独なる十一《イレブンフラッグス》”などの国々は、全てかの巨大国家が分裂してできた残滓なのである。" –set aStr to getEditorText() –"|○o○o○《XXXXX》" –> "XXXXX" set bRes to trimStrHeaderFromTo(aStr, "|", "《", "》") of me –"aaaaa○○○(XXXXX)" –> "XXXXX" set cStr to trimStrHeaderFromToForward(bRes, "(", ")") of me (* " 数多国ある西方諸国だが、元を辿ればとある一つの国へとつながっていた。それはシルエットナイトの力により西方の地に覇をとなえた人類が作り上げた超巨大国家、その名を“ファダーアバーデン”という。 西方暦一二八九年の現在において西方諸国を構成する主要国家、“ジャロウデク王国”、“クシェペルカ王国”、“ロカール諸国連合”、“イレブンフラッグス”などの国々は、全てかの巨大国家が分裂してできた残滓なのである。" *) –"|○o○o○《XXXXX》" –> "XXXXX" on trimStrHeaderFromTo(aParamStr, headerStr, fromStr, toStr) set theScanner to NSScanner’s scannerWithString:aParamStr set anArray to NSMutableArray’s array() repeat until (theScanner’s isAtEnd as boolean) set {theResult, theKey} to theScanner’s scanUpToString:headerStr intoString:(reference) theScanner’s scanString:fromStr intoString:(missing value) set {theResult, theValue} to theScanner’s scanUpToString:fromStr intoString:(reference) if theValue is missing value then set theValue to "" theScanner’s scanString:fromStr 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, i & fromStr, "") of me end repeat set curStr to repChar(curStr, toStr, "") of me return curStr end trimStrHeaderFromTo –"aaaaa○○○(XXXXX)" –> "XXXXX" on trimStrHeaderFromToForward(aParamStr, fromStr, toStr) set theScanner to NSScanner’s scannerWithString:aParamStr set anArray to NSMutableArray’s array() repeat until (theScanner’s isAtEnd as boolean) set {theResult, theKey} to theScanner’s scanUpToString:fromStr intoString:(reference) set curLoc to (theScanner’s scanLocation()) + 1 –scan back to different kind of character set prevKind to detectCharKindMain(text (curLoc – 1) of aParamStr) of me repeat with i from curLoc – 2 to 1 by -1 set aStr to text i of aParamStr set curKind to detectCharKindMain(aStr) of me if prevKind is not equal to curKind then exit repeat end if end repeat try set tmpStr to text (i + 1) thru curLoc of aParamStr theScanner’s scanString:fromStr intoString:(missing value) set {theResult, theValue} to theScanner’s scanUpToString:fromStr intoString:(reference) if theValue is missing value then set theValue to "" theScanner’s scanString:fromStr intoString:(missing value) anArray’s addObject:tmpStr end try 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, i, "") of me end repeat set curStr to repChar(curStr, toStr, "") of me return curStr end trimStrHeaderFromToForward 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 –文字種別判定 on detectCharKindMain(aStr) set s1Res to chkKanji(aStr) of me set s2Res to chkKatakana(aStr) of me set s3Res to chkHiragana(aStr) of me set s4Res to chkLineFeed(aStr) of me set s5Res to chkSpecialSign(aStr) of me set s6Res to chkAlphaNumeric(aStr) if s1Res = true then set curKind to "Kanji" else if s2Res = true then set curKind to "Katakana" else if s3Res = true then set curKind to "Hiragana" else if s4Res = true then set curKind to "Line Feed" else if s5Res = true then set curKind to "Sign" else if s6Res = true then set curKind to "Alpha Numeric" end if return curKind end detectCharKindMain on chkKanji(aChar) return detectCharKind(aChar, "[一-龠]") of me end chkKanji on chkHiragana(aChar) return detectCharKind(aChar, "[ぁ-ん]") of me end chkHiragana on chkKatakana(aChar) return detectCharKind(aChar, "[ァ-ヶ]") of me end chkKatakana on chkLineFeed(aChar) return aChar is in {string id 10, string id 13, string id 13 & string id 10} end chkLineFeed on chkSpecialSign(aChar) return aChar is in {"「", "」", "『", "』", "ー", "―", "〜", "~", "!", "?", "&", "/", "《", "》", "#", "…", "・", "♪", "。", "、", ".", "々", "“", "”", "*", "(", ")", "(", ")", " ", " ", "§", "【", "】", "■", "%", "≒"} end chkSpecialSign on chkAlphaNumeric(aChar) return detectCharKind(aChar, "[a-zA-Z0-9a-zA-Z0-9]") of me –半角全角英数字 end chkAlphaNumeric on detectCharKind(aChar, aPattern) set aChar to NSString’s stringWithString:aChar set searchStr to NSString’s stringWithString:aPattern set matchRes to aChar’s rangeOfString:searchStr options:(NSRegularExpressionSearch) if matchRes’s location() = (current application’s NSNotFound) or (matchRes’s location() as number) > 9.99999999E+8 then return false else return true end if end detectCharKind on getEditorText() tell application "CotEditor" if (count every document) = 0 then return false tell front document return contents end tell end tell end getEditorText |
ASOCで英数字以外を削除して返す
AppleScript名:ASOCで英数字以外を削除して返す |
— Created 2015-12-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "<< 98158999992aazaaZZZ >>" set bStr to returnNumberAndAlphabetCharsOnly(aStr) –> "98158999992aazaaZZZ" on returnNumberAndAlphabetCharsOnly(aStr) set anNSString to current application’s NSString’s stringWithString:aStr set anNSString to anNSString’s stringByReplacingOccurrencesOfString:"[^0-9A-Za-z]" withString:"" options:(current application’s NSRegularExpressionSearch) range:{0, anNSString’s |length|()} return anNSString as text end returnNumberAndAlphabetCharsOnly |
AlphabetとNumericの混在かどうかを調べる
AppleScript名:AlphabetとNumericの混在かどうかを調べる |
— Created 2015-12-04 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aRes to chkMixtureOfNumericAndAlphabet("ABC") of me –> false set aRes to chkMixtureOfNumericAndAlphabet("123") of me –> false set aRes to chkMixtureOfNumericAndAlphabet("4f73vg1v") of me –Target –> true set aRes to chkMixtureOfNumericAndAlphabet("4f73vg1vあああ") of me –> false –数字とアルファベットの混在状態の時にtrueを返す on chkMixtureOfNumericAndAlphabet(checkString) set a0Res to chkAlphabetAndNumeric(checkString) of me set a1Res to chkNumeric(checkString) of me set a2Res to chkAlphabet(checkString) of me if {a0Res, a1Res, a2Res} = {true, false, false} then return true else return false end if end chkMixtureOfNumericAndAlphabet –数字のみかを調べて返す on chkNumeric(checkString) set digitCharSet to current application’s NSCharacterSet’s characterSetWithCharactersInString:"0123456789" set ret to my chkCompareString:checkString baseString:digitCharSet return ret as boolean end chkNumeric — アルファベットのみか調べて返す on chkAlphabet(checkString) set aStr to current application’s NSString’s stringWithString:checkString set allCharSet to current application’s NSMutableCharacterSet’s alloc()’s init() allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "a", 26)) allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "A", 26)) set aBool to my chkCompareString:aStr baseString:allCharSet return aBool as boolean end chkAlphabet — アルファベットと数字のみか調べて返す on chkAlphabetAndNumeric(checkString) set aStr to current application’s NSString’s stringWithString:checkString set allCharSet to current application’s NSMutableCharacterSet’s alloc()’s init() allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "0", 10)) allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "a", 26)) allCharSet’s addCharactersInRange:(current application’s NSMakeRange(ASCII number of "A", 26)) set aBool to my chkCompareString:aStr baseString:allCharSet return aBool as boolean end chkAlphabetAndNumeric on chkCompareString:checkString baseString:baseString set aScanner to current application’s NSScanner’s localizedScannerWithString:checkString aScanner’s setCharactersToBeSkipped:(missing value) aScanner’s scanCharactersFromSet:baseString intoString:(missing value) return (aScanner’s isAtEnd()) as boolean end chkCompareString:baseString: |
文字種別にカウントする v2
AppleScript名:文字種別にカウントする v2 |
— Created 2018-1-11 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/5104 property NSString : a reference to current application’s NSString property NSNumber : a reference to current application’s NSNumber property NSDictionary : a reference to current application’s NSDictionary property NSCountedSet : a reference to current application’s NSCountedSet property NSMutableArray : a reference to current application’s NSMutableArray property NSNumberFormatter : a reference to current application’s NSNumberFormatter property NSRegularExpressionSearch : a reference to current application’s NSRegularExpressionSearch property NSNumberFormatterRoundUp : a reference to current application’s NSNumberFormatterRoundUp set sourcePath to choose file of type {"public.plain-text"} tell current application set aStr to (read sourcePath as «class utf8») end tell set aRes to detectCharKindRating(aStr) of me –> {kanjiNum:563289, kanjiRating:22.0, hiraganaNum:1311933, hiraganaRating:51.2, katakanaNum:210161, katakanaRating:8.2, otherNum:478690, otherRating:18.7, totalCount:2564073}–Light Novel –> {kanjiNum:24960, kanjiRating:28.0, hiraganaNum:56080, hiraganaRating:62.9, katakanaNum:1063, katakanaRating:1.2, otherNum:7136, otherRating:8.0} –文学(坊ちゃん) on detectCharKindRating(aStr as string) set theCountedSet to NSCountedSet’s alloc()’s initWithArray:(characters of aStr) set theEnumerator to theCountedSet’s objectEnumerator() set cCount to 0 set hCount to 0 set kCount to 0 set oCount to 0 set totalC to length of aStr repeat set aValue to theEnumerator’s nextObject() if aValue is missing value then exit repeat set aStr to aValue as string set tmpCount to (theCountedSet’s countForObject:aValue) set s1Res to chkKanji(aStr) of me set s2Res to chkKatakana(aStr) of me set s3Res to chkHiragana(aStr) of me if s1Res = true then set cCount to cCount + tmpCount else if s2Res = true then set kCount to kCount + tmpCount else if s3Res = true then set hCount to hCount + tmpCount else set oCount to oCount + tmpCount end if end repeat set ckRes to roundingUp((cCount / totalC) * 100, 1) of me set kkRes to roundingUp((kCount / totalC) * 100, 1) of me set hgRes to roundingUp((hCount / totalC) * 100, 1) of me set otRes to roundingUp((oCount / totalC) * 100, 1) of me return {kanjiNum:cCount, kanjiRating:ckRes, hiraganaNum:hCount, hiraganaRating:hgRes, katakanaNum:kCount, katakanaRating:kkRes, otherNum:oCount, otherRating:otRes} end detectCharKindRating on chkKanji(aChar) return detectCharKind(aChar, "[一-龠]") of me end chkKanji on chkHiragana(aChar) return detectCharKind(aChar, "[ぁ-ん]") of me end chkHiragana on chkKatakana(aChar) return detectCharKind(aChar, "[ァ-ヶ]") of me end chkKatakana on detectCharKind(aChar, aPattern) set aChar to NSString’s stringWithString:aChar set searchStr to NSString’s stringWithString:aPattern set matchRes to aChar’s rangeOfString:searchStr options:(NSRegularExpressionSearch) if matchRes’s location() = (current application’s NSNotFound) or (matchRes’s location() as number) > 9.99999999E+8 then return false else return true end if end detectCharKind on roundingUp(aNum, aDigit as integer) set a to aNum as real set aFormatter to NSNumberFormatter’s alloc()’s init() aFormatter’s setMaximumFractionDigits:aDigit aFormatter’s setRoundingMode:(NSNumberFormatterRoundUp) set aStr to aFormatter’s stringFromNumber:(NSNumber’s numberWithFloat:a) return (aStr as text) as real end roundingUp |
文字種類変換(ASOC)
テキストの各種文字の変換を行うAppleScriptです。
半角カタカナから全角への変換など、いまやテキストエディタの機能など用いる必要もなく、Cocoaの機能を呼び出すと手軽に行うことができます。
AppleScript名:文字種類変換(ASOC) |
— Created 2017-09-06 by Shane Stanley — Modified 2017-09-06 by Takaaki Naganoya use AppleScript version "2.5" — (10.12) or later use framework "Foundation" use scripting additions –http://piyocast.com/as/archives/4811 property NSString : a reference to current application’s NSString property NSStringTransformFullwidthToHalfwidth : a reference to current application’s NSStringTransformFullwidthToHalfwidth property NSStringTransformHiraganaToKatakana : a reference to current application’s NSStringTransformHiraganaToKatakana property NSStringTransformLatinToHiragana : a reference to current application’s NSStringTransformLatinToHiragana property NSStringTransformLatinToKatakana : a reference to current application’s NSStringTransformLatinToKatakana property NSStringTransformToUnicodeName : a reference to current application’s NSStringTransformToUnicodeName property NSStringTransformToXMLHex : a reference to current application’s NSStringTransformToXMLHex set a01 to hanToZen("トウキョウト") of me –> "トウキョウト"–Zenkaku (Full Width) set a02 to zenToHan(a01) of me –> "トウキョウト" –Hankaku (Half Width) set a03 to katakanaToHiraganaTo(a01) of me –> "とうきょうと" set a04 to hiraganaToKatakana(a03) of me –> "トウキョウト" set a05 to hiraganaToalphabet(a03) of me –> "toukyouto" set a06 to alphabetToHiragana(a05) of me –> "とうきょうと" set a07 to katakanaToAlphabet(a04) of me –> "toukyouto" set a08 to alphabetToKatakana(a07) of me –> "トウキョウト" set a09 to characterToUnicodeName("あ") of me –> "\\N{HIRAGANA LETTER A}" set a10 to unicodeNameToCharacter(a09) of me –> "あ" set a11 to stringToXMLHex("あ") of me –> "あ" set a12 to xmlHexTostring(a11) of me –> "あ" –半角→全角変換 on hanToZen(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformFullwidthToHalfwidth) |reverse|:true) as string end hanToZen –全角→半角変換 on zenToHan(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformFullwidthToHalfwidth) |reverse|:false) as string end zenToHan –ひらがな→カタカナ変換 on hiraganaToKatakana(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformHiraganaToKatakana) |reverse|:false) as string end hiraganaToKatakana –カタカナ→ひらがな変換 on katakanaToHiraganaTo(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformHiraganaToKatakana) |reverse|:true) as string end katakanaToHiraganaTo –ローマ字→ひらがな変換 on alphabetToHiragana(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformLatinToHiragana) |reverse|:false) as string end alphabetToHiragana –ひらがな→ローマ字変換 on hiraganaToalphabet(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformLatinToHiragana) |reverse|:true) as string end hiraganaToalphabet –ローマ字→カタカナ変換 on alphabetToKatakana(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformLatinToKatakana) |reverse|:false) as string end alphabetToKatakana –カタカナ→ローマ字変換 on katakanaToAlphabet(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformLatinToKatakana) |reverse|:true) as string end katakanaToAlphabet –文字→Unicode Name変換 on characterToUnicodeName(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformToUnicodeName) |reverse|:false) as string end characterToUnicodeName –Unicode Name→文字変換 on unicodeNameToCharacter(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformToUnicodeName) |reverse|:true) as string end unicodeNameToCharacter –文字→XML Hex変換 on stringToXMLHex(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformToXMLHex) |reverse|:false) as string end stringToXMLHex –XML Hex→文字変換 on xmlHexTostring(aStr) set aString to NSString’s stringWithString:aStr return (aString’s stringByApplyingTransform:(NSStringTransformToXMLHex) |reverse|:true) as string end xmlHexTostring |
原稿用紙枚数シミュレーション(簡易版)v1
AppleScript名:原稿用紙枚数シミュレーション(簡易版)v1 |
— Created 2018-1-13 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/5120 set aText to retTestText() of me set sRes to genkoSimulation(20, 20, aText) of me display notification "原稿用紙換算で約" & (sRes as string) & "枚です" –原稿用紙枚数シミュレーション(簡易版) on genkoSimulation(lineMax as integer, genkoLineMax as integer, aText as string) script spdT property aList : {} end script if aText = "" then return 0 set (aList of spdT) to characters of aText set charPointer to 1 set lineCounter to 1 set aLen to length of (aList of spdT) set i to 1 repeat while i < aLen set j to contents of item i of (aList of spdT) if j is in {string id 10, string id 13, string id 10 & string id 13} then set charPointer to 1 set lineCounter to lineCounter + 1 else set charPointer to charPointer + 1 if charPointer ≥ lineMax then set charPointer to 1 set lineCounter to lineCounter + 1 end if end if set i to i + 1 end repeat set totalPage to lineCounter div genkoLineMax set amariPage to lineCounter mod genkoLineMax if amariPage = 0 then — else set totalPage to totalPage + 1 end if return totalPage end genkoSimulation on retTestText() return "12345 あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも やいゆえよ わいうえを あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも やいゆえよ わいうえを 1234567890123456789ぉー" end retTestText |
love
Basicで作られた花文字プログラムを、AppleScriptに移植したものです。元は、ChipmunkBasic用のサンプルプログラムで、1996年作成のクレジットが銘打たれていますが、オリジナルはもっと昔に作られたものでしょう。
図形パターンは西新宿に置かれているロバート・インディアナ氏作のオブジェ「LOVE」(1965年発表)のデータそのものです。
下地に敷く文字は変更できますが、模様の文字列(LOVE)は固定データで持たせているので、そのままでは変更できません。
→ その後、英単語の花文字プログラムを作成してみました。
AppleScript名:love |
— Created 2015-02-15 by Takaaki Naganoya — 2015 Piyomaru Software (* 20 rem PRINT "THANKS TO ROBERT INDIANA AND DAVID AHL" 21 rem print "contributed by ATStarr@Amherst.Edu 1996" http://www.nicholson.com/rhn/basic/classic_programs/love.bas *) set charMode to "E" –J or E set aTargChar to "makiko" set outText to "" set aSpc to returnSpc(charMode) of me set aList to retLoveList() set aPos to 0 set charFlag to true –false:space char repeat with i in aList set j to contents of i if charFlag = true then set aText to retCirculateStrs(aTargChar, j) of me else set aText to retCirculateStrs(aSpc, j) of me end if set outText to outText & aText set charFlag to not charFlag set aPos to aPos + j if aPos ≥ 60 then set aPos to 0 set outText to outText & return set charFlag to true end if end repeat return outText on retLoveList() return {60, 1, 12, 26, 9, 12, 3, 8, 24, 17, 8, 4, 6, 23, 21, 6, 4, 6, 22, 12, 5, 6, 5, 4, 6, 21, 11, 8, 6, 4, 4, 6, 21, 10, 10, 5, 4, 4, 6, 21, 9, 11, 5, 4, 4, 6, 21, 8, 11, 6, 4, 4, 6, 21, 7, 11, 7, 4, 4, 6, 21, 6, 11, 8, 4, 4, 6, 19, 1, 1, 5, 11, 9, 4, 4, 6, 19, 1, 1, 5, 10, 10, 4, 4, 6, 18, 2, 1, 6, 8, 11, 4, 4, 6, 17, 3, 1, 7, 5, 13, 4, 4, 6, 15, 5, 2, 23, 5, 1, 29, 5, 17, 8, 1, 29, 9, 9, 12, 1, 13, 5, 40, 1, 1, 13, 5, 40, 1, 4, 6, 13, 3, 10, 6, 12, 5, 1, 5, 6, 11, 3, 11, 6, 14, 3, 1, 5, 6, 11, 3, 11, 6, 15, 2, 1, 6, 6, 9, 3, 12, 6, 16, 1, 1, 6, 6, 9, 3, 12, 6, 7, 1, 10, 7, 6, 7, 3, 13, 6, 6, 2, 10, 7, 6, 7, 3, 13, 14, 10, 8, 6, 5, 3, 14, 6, 6, 2, 10, 8, 6, 5, 3, 14, 6, 7, 1, 10, 9, 6, 3, 3, 15, 6, 16, 1, 1, 9, 6, 3, 3, 15, 6, 15, 2, 1, 10, 6, 1, 3, 16, 6, 14, 3, 1, 10, 10, 16, 6, 12, 5, 1, 11, 8, 13, 27, 1, 11, 8, 13, 27, 1, 60} end retLoveList –Return Space (English Char/Japanese Char) on returnSpc(aMode) if aMode = "E" then return " " –Single character Space if aMode = "J" then return " " –Japanese Double Width Space end returnSpc on retCirculateStrs(aText, repCharTimes) set aLen to length of aText set aTimes to repCharTimes div aLen set aMod to repCharTimes mod aLen set outStr to "" repeat aTimes times set outStr to outStr & aText end repeat if aMod is not equal to 0 then set aModStr to text 1 thru aMod of aText set outStr to outStr & aModStr end if return outStr end retCirculateStrs |