where/whose句によるフィルターについて教えてください。 2や3のような事を実現するにはどのように書けばいいのでしょうか? グルグル回さずに済む方法が知りたいです。 0255名称未設定2014/08/26(火) 22:15:15.01ID:mMnMi0CT0 すまん適当だし合ってるかどうかも知りませんが iWork items (whose ((item 1 of position) as integer) of it > 100) of page 1 of document 1 item 1 of position とか参照が参照のままでダメだから、型を適当に明示して変換すると けっこう行けたり行けなかったりしないかなあ?
set theList to (find text "[+-]?\\d+(\\.\\d+)?" in "数字を足してね♥︎ -1, 0.01, +1, 2,..,99 " with regexp, all occurrences and string result) set total to 0 repeat with x in theList set total to (total + (atof (x))) end repeat set message to "(" & (join theList using ") + (") & ") = " & total
find text: これがあると正規表現まわりで rubyその他に頼る必要がなくなる atof: x as real と書いたのと同じになる (他にも sin, cos とかC言語ライクな数学関数が色々) join: 定石の set AppleScript's text item delimiters to "," を使ったリスト連結よりもシンプル マニュアル: http://www.satimage.fr/software/en/dictionaries/dict_satimage.html0268名称未設定2014/09/20(土) 07:21:55.77ID:J1L8Sc170 数値 + 数値文字列 = 数値 なので、この場合 atof は無くてもOKでした 0269名称未設定2014/09/20(土) 08:32:33.91ID:1d3efwqb0>>267 わかる人は使えばいいけど、正規表現、文字列の検索・置換などの取り扱いは ASのデフォルトの考え方を理解してないと、あとでつまづくし、機能拡張を インストールしないと使えないスクリプトは会社などで使うときとても面倒。 検索・置換程度の話なら避けたほうがいいと個人的には思う。 do shell scriptでrubyなりperlなりsedなりいろいろ使う契機にもなるし。 0270名称未設定2014/09/20(土) 08:35:19.68ID:3i170VB80>>269 同意 個人的にosaxは使わないようにしてる いまはdo shell scriptがあるから、何か複雑なことしたかったら パッケージにシェルスクリプト突っ込んだ方が早いし確実 0271名称未設定2014/09/20(土) 09:18:42.39ID:1d3efwqb0 「ASやってます」と言うと笑われるけど、その実、中身はdo shel scriptで他のおいしいところを 使いまくり、というのはよくある話。グルー言語としてのASは非常に強力。 0272名称未設定2014/09/20(土) 16:27:57.17ID:AqRjHw4B0 do shel scriptは便利だけど使い方間違えるとめちゃくちゃ遅くなるから、気をつけないとね。 たとえば大量に変換とかの場合は、do shel scriptを回すんじゃなくて do shel scriptの中で回るようにとかね。 0273名称未設定2014/09/20(土) 23:11:29.75ID:3i170VB80>>272 君はコンパイラに頼りすぎ >shel 0274名称未設定2014/09/20(土) 23:55:25.38ID:AqRjHw4B0>>273 なんも考えずに上のコピペしただけだわ 0275名称未設定2014/10/25(土) 07:12:00.39ID:5qSeWYWr0 けっこうびっくりしたけど、10.10からのJavaScriptもここでやるといいよね。 ほかでやるとこないし。ほぼなんでもできるのかな? 0276名称未設定2014/10/25(土) 09:21:10.13ID:5qSeWYWr0 思いつきだけだけど、JavaScriptだけでGUIつきアプリとかできるの? できるわけないか。 0277名称未設定2014/10/25(土) 14:50:07.62ID:LnSjrQfx0 Macでプログラミング{10} http://anago.2ch.net/test/read.cgi/mac/1248682344/0278名称未設定2014/10/25(土) 17:55:17.74ID:N9eHGFRP0 質問です。OS Mavericks アップルスクリプトでもう少しGUIのいいものを作ろうとして Xcode6.1をつかってcocoa-applescriptのアプリケーションを触ってみようと思いました。 具体的にはGUIのdatePickerを配置して AppDelegate.applescriptのファイルで ユーザーがdatePickerで設定した日付を取得しようとしたのです。 下にコメントアウトしてるところがdatePickerとつながっており取得できていない箇所です。
on workSchedulRecorder_(sender)
set Client to name_Client's stringValue() as string -- set the_Date to int_date's dateValue()
end workSchedulRecorder_
上のはCombo BoxとつながっておりstringValue() as stringで取得できました。 問題の箇所は調べて見つかったのに下のようなエラーがでました
2014-10-25 17:52:08.866 DPC Client Scheduler[2711:303] *** -[AppDelegate workSchedulRecorder:]: Can’t make «class ocid» id «data optr000000000D0000007491B841» into type Unicode text. (error -1700)
dateValue()ではなく違う言葉なのでしょうか・・・ どなたかお力になってくださいませんでしょうか 0279名称未設定2014/10/25(土) 18:45:32.40ID:Y7ywkFMP0>>278 set the_Date to int_date's dateValue() これでそのエラーになる?出ないけどなあ set the_Date to int_date's dateValue() as string だと、文字列に変換できないオブジェクト(この場合NSDate)を文字列に変換しようとすると(全く)同じエラーが出るけど
そこで、もう一つ質問したいのですが、 このthe_Dateから得たdate_Value()を アップルスクリプトのdateの型?っていうのでしょうか date "2014年10月25日土曜日 0:00:00" にするのにはどうすればいいのでしょうか? 0281名称未設定2014/10/25(土) 19:25:35.38ID:Y7ywkFMP0>>279,278 とりあえずな日付(NSDate)を文字列にはこんなんかな set theDate to int_date's dateValue() set dateFormatter to current application's NSDateFormatter's alloc()'s init()'s autorelease() dateFormatter's setDateFormat_("YYYY-MM-dd hh:mm:ss a") set dateString to dateFormatter's stringForObjectValue_(theDate)
>>280 わからんw 文字列にしたら date にできるんじゃないかな。AppleScriptもdate<->文字列はめんどくさいっぽいなあ 0282名称未設定2014/10/25(土) 19:27:59.17ID:pbKxf6+40 暇つぶしにデータピッカからテキストにして、テキストからNSDateに変換する流れ書いてみた、テストしてないです。 NSDateはテキストじゃないから、直接変換しようとしてつまるよねー。 property datePicker : missing value set pickDate to my datePicker's dateValue() set nsDateObj to my pick2date(pickDate)
on pick2date(pickdate) set cal to current application's class "NSCalendar"'s currentCalendar() set com to cal's components_fromDate_(254, pickdate) set year to com's |year|() set month to com's |month|() set day to com's |day|() set hour to com's hour() set minute to com's minute() set second to com's |second|() set time2sec to (((hour) * 3600) + ((minute) * 60)+ second) as number set qqq to my mkDate(year, month, day, 0) + time2sec return result end pick2date
on makeDate(y, m, d, s) tell (get current date) set {year, its month, day, time} to {y, m, d, s} return its contents end tell end makeDate 0283名称未設定2014/10/25(土) 19:30:07.23ID:pbKxf6+40>>282 あNSDateじゃなくてASDate 0284名称未設定2014/10/25(土) 20:10:23.39ID:pbKxf6+40 ハンドラの呼び出し名適当なやつのまんまだわ適宜直してちょ 0285質問者 2782014/10/25(土) 20:18:04.97ID:N9eHGFRP0 281さんありがとうございます。実際おしえてもらったコードを入れてみました set Client to name_Client's stringValue() as string set the_Date to int_date's dateValue()
set dateFormatter to current application's NSDateFormatter's alloc()'s init()'s autorelease() dateFormatter's setDateFormat_("YYYY-MM-dd hh:mm:ss a") set dateString to dateFormatter's stringForObjectValue_(theDate) 最後の行でエラーが起きてしまいました Scheduler[3049:303] *** -[AppDelegate workSchedulRecorder:]: The variable theDate is not defined. (error -2753) ご返答のコード内容が理解できない初心者なのですが 変数のthe_Dateは作っていただいた書式にははまらないということでしょうか もう少しねばってみたいと思います。ご返答ありがとうございました! 0286名称未設定2014/10/25(土) 20:26:21.21ID:pbKxf6+40>>285 落ち着きなさいtheDateが無いんだ 君はthe_Dateにしてるみたいだよ。 0287質問者 2782014/10/25(土) 20:55:41.66ID:N9eHGFRP0 285さんありがとうございます!! もう、学も無いのに英語サイトまわってくたくたになっていました。笑 出ました出ました! 本当に助かりました。ありがとうございます! dateformatについての基礎知識は明日にでも探してみたいと思います。 これで、やりたいことが出来そうです。
単純なところでつまずいてしまっております。 スクリプトエディタでなんとなく進んで来れたので罰が当たったみたいで どうか、よろしくお願いします。 0290名称未設定2014/10/26(日) 18:12:44.58ID:BJ1Mvzrv0 わからん。qlmanageを一覧表示で表示するにはどうすればいいの? 0291名称未設定2014/10/26(日) 20:02:33.54ID:THGeGbUA0>>289 set dateString to "2014/10/26" as text log class of dateString log class of "2014/10/26" log class of date dateString log class of date "2014/10/26" Cocoa-AppleScript の date文 が変数の場合なんかおかしなことをしている/おかしなことになっている date 変数 の場合に作られるのは«script»オブジェクト?
NSDateベースで考えた方がいいような どうしてもdateオブジェクト使いたい場合でも、で文字列からdateオブジェクトへは、文字列からCocoaオブジェクトにしてからdateオブジェクトへかなあ 0292名称未設定2014/10/26(日) 21:13:11.35ID:juj/Re6i0>>289 >>282のmakeDateハンドラ使ってみれば。 0293質問者 2782014/10/26(日) 22:37:36.09ID:UmsXIIQV0 292さんありがとうございます。がんばってみましたが能力が足りないせいでうまくいきませんでした set the_Date to pick_date's dateValue() --my取りました set nsDateObj to my pick2date(the_Date)
on pick2date(pickdate) set cal to current application's class "NSCalendar"'s currentCalendar() set com to cal's components_fromDate_(254, pickdate)
set year to com's |year|() set month to com's |month|() set day to com's |day|() set hour to com's hour() set minute to com's minute() set second to com's |second|() set time2sec to (((hour) * 3600) + ((minute) * 60)+ second) as number set qqq to my makeDate(year, month, day, 0) + time2sec --mkDateからmake dateに訂正 return result end pick2date
on makeDate(y, m, d, s) tell (get current date) set {year, its month, day, time} to {y, m, d, s} return its contents end tell end makeDate いろいろ試しながら探しながらやってみました。。せっかく書いてくださったんですが、、 すると、下記の閉じ忘れのようなエラーが出てコンパイル失敗になったようです。 0294質問者 2782014/10/26(日) 22:39:28.30ID:UmsXIIQV0 Client Scheduler/AppDelegate.applescript:33: error: Expected “end” but found unknown token. (-2741) Command /usr/bin/osacompile failed with exit code 1
先ほどwebでみつけたのですが、出だしの私はASファイルを別に作って、引数付きで呼び出して使った方が良さそうです。 0295質問者 2782014/10/26(日) 22:40:19.50ID:UmsXIIQV0 291さん ありがとうございます。logで調べながらする方法すばらしいですね。 log class of date dateString 私のひっかかった date "変数" の箇所 log date dateString ですると複数のパラメーターがどうのでエラーになりました appdelegateはすごく私には早すぎた感がありました。皆さんこんなに助言いただいたのに うまくいかず申し訳ありません。
スクリプト中には同一時刻の場合サブナンバーを付けるようになってますが、これが出来ず、同じ 名前の項目があるため処理できない、とのメッセージが出てしまいます。下記がサブナンバーの 記述ですがどうすればサブナンバーがつくようになりますか? OS Mavericks, mac pro mid 2012 です。
--もし同一時刻のファイルが存在した場合、サブナンバーをつける set ChkFname to name of Obj if ChkFname is not Orifname then set CHK to "OK" end if if ChkFname is Orifname then set CHK to "NO" set subNUM to subNUM + 1 end if 0340名称未設定2014/11/08(土) 15:44:24.97ID:ypauXXT+0 エラーになってるのは引用箇所の直前の
set name of Obj to fname & "." & kakutyousi
だから、そこ try / on error / end で囲えばいいんじゃないの スクリプトちゃんと読んでないけどとりあえず _2 _3 _4 などにリネームされる
try set name of Obj to fname & "." & kakutyousi on error --もし同一時刻のファイルが存在した場合、サブナンバーをつける set ChkFname to name of Obj if ChkFname is not Orifname then set CHK to "OK" end if if ChkFname is Orifname then set CHK to "NO" set subNUM to subNUM + 1 end if end try 0341名称未設定2014/11/08(土) 16:34:00.38ID:LlCPsU700>>340 set name of Obj to fname & "." & kakutyousi の;で、end of lineがあるべきところですがunkown tokenが見つかりました、 で引っかかってしまいうまくいかないです。 0342名称未設定2014/11/08(土) 17:01:27.86ID:ypauXXT+0 その行はオリジナルのままにしといてちょ(あるいは amp; を取り去る) 生アンパサンドが打てない 0343名称未設定2014/11/08(土) 17:28:47.70ID:bXbYhwqn0>>340 てか、全然実行してないけど、なんでエラーになるん? すでに途中まで実行してて正しい名前になってる場合に エラーになるのかな? 0344名称未設定2014/11/08(土) 17:41:46.94ID:LlCPsU700>>342 んー。全くリネームしなくなりました。というかtry でループしてる感じです。 0345名称未設定2014/11/08(土) 20:09:06.28ID:bXbYhwqn0>>344 >>343が全てなのでは? 普通に動くよ。 それに、そもそもこのスクリプトで同時刻でサブナンバーがつく 状況は普通は起きないよ。子どもの運動会の写真を連写したりしたらありうるけど。 0346名称未設定2014/11/08(土) 20:12:37.10ID:LlCPsU700>>345 まさに連写です。 現状止まったら同じ秒の処理済みのファイル名に自分で1とか追加して同じファイル名にならない ようにしてます。 0347名称未設定2014/11/08(土) 20:44:30.86ID:bXbYhwqn0>>346 あんま言うのもなんだけど、そしたらもう問題解決してるよ。 エラーは当然出る。手作業が嫌ならスクリプトを変更。 基本的な変更はだれでもできる簡単なものだから、ちょっと頑張ってみたら? 今言えるのはこんだけ。 0348名称未設定2014/11/08(土) 20:51:14.99ID:wpKvrxUU0 自分で[考える、作り出す]ことをしなくなった人間って生きる価値無いよね。 最近そんな人多いいけどさ 0349名称未設定2014/11/08(土) 20:54:50.91ID:ypauXXT+0 これでいくかな? 下記を>>340と入れ替え(アンパサンドについては同じく書き替え)
try set name of Obj to fname & "." & kakutyousi end try --もし同一時刻のファイルが存在した場合、サブナンバーをつける set ChkFname to name of Obj if ChkFname is not Orifname then set CHK to "OK" end if if ChkFname is Orifname then set CHK to "NO" set subNUM to subNUM + 1 end if 0350名称未設定2014/11/08(土) 21:26:27.22ID:bXbYhwqn0 言うだけでもなんなんで。 よくわからんがバージョン依存あるかも。 あー、書いてたらアイスとけたよ
tell application "Finder" set theFileList to selection as alias list repeat with i in theFileList set i to i as alias set i_Extension to name extension of i set AnswerFileName to my getExif_(i) & i_Extension set NUM to 1 repeat while (exists (file AnswerFileName of parent of i)) set AnswerFileName to my getExif_(i) & "_" & NUM & i_Extension set NUM to NUM + 1 end repeat set name of i to AnswerFileName end repeat end tell
on getExif_(theFile) set theName_of_Camera to do shell script "exiftool -model " & quoted form of POSIX path of theFile
set theDate to do shell script "exiftool -DateTimeOriginal " & quoted form of POSIX path of theFile
set OriginalDeliniter to AppleScript's text item delimiters set AppleScript's text item delimiters to ":" set theName_of_Camera to item 2 of text items of theName_of_Camera set theDate to items 2 thru end of text items of theDate set AppleScript's text item delimiters to OriginalDeliniter return text 2 thru end of theName_of_Camera & (theDate as string) end getExif_