Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

タグ: 10.13savvy

offset ofの高速実行

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

文字列中に指定した文字列があるか検索する

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

テキストの複数検索(ファイルから読み込んで検索)

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

テキストのキーワード検索(結果をNSRangeのlistで返す)

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

テキストからリガチャーを削除する v2

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

文字置換 v2

Posted on 2月 6, 2018 by Takaaki Naganoya

指定文字列の中の文字(文字列)を置換する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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | 1 Comment

ASOCで文字置換5

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

横書きテキストを縦書きに変換 v6

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

セリフの文章のみを抽出する v1

Posted on 2月 6, 2018 by Takaaki Naganoya
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:

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

shellの出力結果をスペースでparseする

Posted on 2月 6, 2018 by Takaaki Naganoya
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]"​​​}

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

&と=で区切られたテキストをrecordに(NSScanner 2)

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

&と=で区切られたテキストをrecordに 改

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

テキストの一部を取り出すじっけんASOC

Posted on 2月 6, 2018 by Takaaki Naganoya
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"

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

文字列から開始文字列と終了文字列に囲まれた内容を削除

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

テキストを指定文字でparseする

Posted on 2月 6, 2018 by Takaaki Naganoya
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", ​​​​​""​​​}

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

与えられたテキストからフライト情報を抽出 v2

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

与えられたテキストからdate objectを抽出 v2

Posted on 2月 6, 2018 by Takaaki Naganoya
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:

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

与えられたテキストから電話番号を抽出 v2

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

与えられたテキストから住所を抽出 v2

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

与えられたテキストからリンクURLを抽出 v3

Posted on 2月 6, 2018 by Takaaki Naganoya
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

★Click Here to Open This Script 

Posted in Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Post navigation

  • Older posts
  • Newer posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • 指定のWordファイルをPDFに書き出す
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • AppleScriptによる並列処理
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • Cocoa Scripting Course 続刊計画
  • macOS 14.xでScript Menuの実行速度が大幅に下がるバグ
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • Keynote/Pagesで選択中の表カラムの幅を均等割
  • macOS 15でも変化したText to Speech環境
  • デフォルトインストールされたフォント名を取得するAppleScript
  • macOS 15 リモートApple Eventsにバグ?
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • Keynoteで2階層のスライドのタイトルをまとめてテキスト化

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (132) CotEditor (66) Finder (51) iTunes (19) Keynote (117) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (55) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC