5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Script 道場

1 : ◆9999ZEL. :02/07/29 06:32
Script は作る楽しみ. でも,情報不足の苦しみもあります.
それを補う方法として,互いの情報を交換するという方法を提言いたします.

Rule :
・雑談 OK
・sage 進行
・煽り/嵐は黙殺.

楽しく,有意義な場所になると,いいにゃ〜.

2 :●~*:02/07/29 07:05
追加
・自作自演禁止
・知ったかぶり禁止
・スペルミス厳禁
・新板及び他スレへの遠征禁止

参考までに
http://pc.2ch.net/test/read.cgi/jobs/1024591071/-100
http://pc.2ch.net/test/read.cgi/jobs/1024883015/l50
http://pc.2ch.net/test/read.cgi/jobs/1026044252/l50
http://pc.2ch.net/test/read.cgi/jobs/1027631143/l50



3 :村澤:02/07/29 07:07
>>2
Σ(゚Д゚; !! マジッスカ

4 :●~*:02/07/29 07:17
Script 捏造になりそうな予感

5 : ◆9999ZEL. :02/07/29 11:16
>>2
笑ってしまった.

>>4
Script は, ' 事実 ' ではなく, ' 作品 ' .
したがって...
' 捏造 ' ではなく, ' 盗作 ' というのが正しい.

でも,ここの趣旨は,そんなこととは無関係.
純粋に, Script の修行を目指すもの.

6 :●~*:02/07/29 12:23
はたらけよ
馬鹿

7 :●~*:02/07/29 14:56
◆9999ZEL. にはスペルミスが多いのでこのほうがよいかと思う

8 :●~*:02/07/29 16:11
おれさー、スレたてがばか以外だったら
結構有意義なスレになったとおもうよ。
もったいないなあ

9 ::02/07/29 16:15
>>1は良いスクリプトを書いて、
汚名挽回、いやいや、汚名返上/名誉挽回できるといいね。

つーわけで、まずは>>1のスクリプトの公開きぼんぬ。


10 :○○○○佐:02/07/29 23:06
FileBuddyを使う昔々、クリエータータイプを変更する時に使っていたスクリプト

例:Textファイル→IEのhtmlファイルに変更

on open theList
tell application "Finder"
repeat with theItem in theList
if theItem is not folder then
set the creator type of theItem to "MSIE"
end if
end repeat
end tell
end open

ファイルタイプも変更する場合は5行目の後に
set the file type of theItem to "ほにゃらら"と1行分追加

11 :●~*:02/07/29 23:11
1行も書けない癖に道場とは是如何に
素直に「教えて下さい」と書けばいいものを( ´,_ゝ`)

12 :○○○○佐:02/07/29 23:13
>>10のインデントがぁ〜

あとなんかの雑誌で見かけたスクリプトでスクロールバーをダブルアローにする
スクリプト

tell application "アピアランス"
   set scroll bar arrow style to ヌconstant ****dublネ
end tell

「ヌ」と「ネ」が禿げしく意味不明。
これって勝手に入力されるんだったかなぁ??
全然覚えてないや。



13 :○○○○佐:02/07/29 23:23
今、ハタと気付いたが、このスレって何のスレですかw
もしやスレ違いか?(´Д`;)

14 :●~*:02/07/29 23:24
>>13
暑さで頭がボケたか?

15 :●~*:02/07/29 23:26
>>13
冷蔵庫に入れないと溶ろけますよ?

16 :○○○○佐:02/07/29 23:26
>>14

最近痴呆気味なんです

17 :村澤:02/07/29 23:33
>>16
DHCを摂取した方がいいぞ

18 :●~*:02/07/29 23:38
>>17
化粧品かよ(゚Д゚)!

19 :コリンのエイリヤス:02/07/30 02:15
もし1が別な人だったら良スレの予感だったのに。
それに、重複スレだし、前スレリンクがないし。


20 :●~*:02/07/30 04:25
前スレリンクがないと寂しいと思ったので、一応2に参考のためのリンクを貼っておきました。
ここで、1=Luciferについてよく観察してからここにどう書込むべきか判断していただきたいと
思います。

21 ::02/07/30 05:39
>>17
頭の中でDHCPクライアントになってIP取得してた漏れは逝ってますか。

22 : ◆9999ZEL. :02/07/30 06:11
>>9
Mac で Script というと,やっぱり AppleScript でしょう.
しかし,別の Script も,考慮してのタイトルです.
(FileMaker にも Script がありますし,Perl だって... <-- Perl は,さっぱりですが...)

良いスクリプトとの事ですが,AppleScript に限っては,道具といった感覚に近い.
したがって,使いやすいものは,自分で作るに限るのです.
言い替えれば,他人の書いた Script は参考にはなっても,使いやすさにおいては,
たとえ,幼稚なものであっても,自分で作ったものがベストだと思うのです.

そうは言っても,人の意見を聴くのは大変勉強になります.
自分とは,まったく発想が違っていたり,別の角度から捕らえることができるから.
それこそが,このスレッドの目的です.

23 : ◆9999ZEL. :02/07/30 06:23
>>10
実は,僕も Type/Creator 変更 Script を作ろうとしていました.
まず,次の Script で, Type/Creator をチェック:

tell application "Finder"
 set T to file type of selection
 set C to creator type of selection
 display dialog T & " : Type" & "
" & C & " : Creator "
end tell

これを作り替えて,変更できるようにしようとしたのですが,
問題は,ターゲットを選べるようにする方法...
どうやら,ダイアログを出している間,別の操作ができないようなのが悩みの種です.

24 : ◆9999ZEL. :02/07/30 08:12
質問スレッドの人,見てるかな?
Lock/Unlock Script だよ〜ん:
(このまま,コピペできるように indent 無しね.)

・FinderPop で呼び出すことを前提にしています.
(Contextual Menu の拡張機能として働きます.)

tell application "Finder"
display dialog "Lock/Unlock" buttons {"Lock", "Unlock"}
set Sel to button returned of result
if Sel = "Lock" then
set Flg to true
else
set Flg to false
end if
set locked of selection to Flg
end tell

25 : ◆9999ZEL. :02/07/30 08:32
>>19
本当は,旧板ではなく,新板に立てたかったのさ.
しかし,そうすると,それこそ重複だと言われるのは必死.
一応,お伺いを立てていたのだけれど,返事がない.
電波板も候補に考えていたけれど,行く末は見えている.

" 重複だ " とのことだけど,あちらは発表会といったおもむき.
先に書いたように, AppleScript は道具のようなものであって,
使いやすい道具は,自分で作ったものがベストなのだ.
前スレリンクは,前スレそのものがないのだから,ないのが当然.

26 :●~*:02/07/30 12:34
>>24

tell application "Finder"
set Sel to display dialog "Lock/Unlock" buttons {"Lock", "Unlock"}
if button returned of Sel = "Lock" then
set locked of selection to true
else
set locked of selection to false
end if
end tell

2行省ける

27 :●~*:02/07/30 13:46
適用「ファインダー」セットSelを話して
ダイアログ「錠がかかります/錠をあける」がボタンで留まることを示して下さい
{その時にセットされたSel=「錠」のボタンが戻ったかが鍵をかけた「錠」、「錠をあける」}、
正直にその他にセットする選択が錠がかかりました、
終わりが、話せば偽って終わる選択

意味不明w

28 :●~*:02/07/30 14:13
ま た 売 名 で す か ?

29 : ◆9999ZEL. :02/07/30 17:55
>>26
するどい!

>>27-28
どうやら,このスレッドは失敗だったようだね.
悲しいけれど...

30 :○○○○佐:02/07/30 19:22
>>29
道場主、失敗ってそりゃねーべ!
痴呆気味の自分が言うのもなんだけど。

31 : ◆9999ZEL. :02/07/30 20:20
>>30
Type/Creator 変更 Scriptを作ってみました.
(とりあえずは,動作しますが,改良の余地大あり.)
不完全なものを別の人の意見を聞きながら,
完全なものに近づけて行くというのが趣旨だったんですが...

property C : {}
property T : {}
tell application "Finder"
 display dialog "select the action: Load/Release" buttons {"Load", "Release"}
 if button returned of result = "Load" then
   set C to creator type of selection
   set T to file type of selection
 else
   display dialog C & " : Creator" & "
" & T & " : Creator" & "
   " buttons {"Both", "Type", "Creator"}
   set Sel to button returned of result
   if Sel = "Both" then
    set creator type of selection to C
    set file type of selection to T
   end if
   if Sel = "Type" then
    set file type of selection to T
   end if
   if Sel = "Creator" then
    set creator type of selection to C
   end if
  end if
end tell

動作:
1: 目的とするType/Creator を記録(最初に Select 状態にしておく.)
2: Script Editor の Run ボタンを押すと,第一回目のダイアログが出ます.
(ここで,記録するか,変更するかを切り替えています.)
3: 二回目のダイアログで,両方変えるか, Creator のみか,Type のみかを選びます.

32 :●~*:02/07/30 20:36
とてもじゃないが、おめーのスクリプトは怖くてつかえません。
一番怖いのがスペルミス

33 : ◆9999ZEL. :02/07/30 20:49
>>12
>ヌconstant ****dublネ
どこかで,説明されているのを見かけたのですが,どこだったのかを思いだせません.
使われ方からすると,全体で定数の意味合いですね.

34 :●~*:02/07/30 21:11
>>33
アップルイベント
クラス

この辺で検索しとけ。


35 : ◆9999ZEL. :02/07/30 21:33
>>32
確かに,上の Script は危険.
では,どこが危険か指摘できる?

>>34
おおおぉぉー,耳寄りな情報.

36 :●~*:02/07/30 21:42
>>35
> では,どこが危険か指摘できる?

製作者

37 :●~*:02/07/30 22:16
あのー君が支持する真之介君の弁護はしないのですか?
自分へ火の粉がかからないように黙ってるだけ?

38 : ◆9999ZEL. :02/07/30 22:18
>>36
やっぱり,立地条件を見誤ったようだ.

39 : ◆9999ZEL. :02/07/30 22:23
>>37
どうかしたの ?
ずっと,リファレンスとにらめっこしていたので...

40 :○○○○佐:02/07/30 23:16
>>31
おおっ、5年前に出会いたかったスクリプトだーねw
残念ながら今手元(自宅)にMacがないので明日会社のMacで試してみますだ。


>>33-34
レスを見て思い出しました。
そのまま半角の「ヌ」と「ネ」だね。
あと「ツ」もあったし・・・


41 :村澤:02/07/30 23:21
モユネ

42 :村澤:02/07/30 23:21
モユメヤ

43 :村澤:02/07/30 23:23
ごめん、“ ”これらのカッコかなあと思ってやってみましたが、どうもヌとかは
ちがうようでした。さてと、オフロに入ってヌルヌルしてこようかな。

44 :●~*:02/07/31 00:41
初心者です。ご利用はオウン・リスクで。
その日の日付けの名前のフォルダをデスクトップに作ります。

set Xmonth to month of (current date)
set Xweek to weekday of (current date)
set nStr to (year of (current date) & "." & mConv(Xmonth) & "." & day of (current date) & space & wConv(Xweek)) as string

tell application "Finder"
activate
make new folder at desktop
select last folder of desktop
set label index of selection to 4
try
set name of selection to nStr
on error
display dialog "同じ名前のフォルダが既にあるようです。名前を変えて下さい" buttons ("OK")
open information window of selection
--move selection to trash
end try
end tell

on mConv(Xmonth)
repeat with i from 1 to 12
if Xmonth = item i of {January, February, March, April, May, June, July, August, September, October, November, December} ツ
then exit repeat
end repeat
return i
end mConv

on wConv(Xweek)
repeat with i from 1 to 7
if Xweek = item i of {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} ツ
then exit repeat
end repeat
return item i of {"(日)", "(月)", "(火)", "(水)", "(木)", "(金)", "(土)"}
end wConv

45 :●~*:02/07/31 00:41
sage忘れスイマセン

46 :親切な人:02/07/31 00:42

ヤフーオークションで、凄い人気商品、発見!!!

「 RX-2001 」がパワーアップした、
「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA#.2ch.net/

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。

ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h4.dion.ne.jp/~gekiyasu/#.2ch.net/

47 ::02/07/31 00:56
ツとかヌとかネとか梨でスクリプト書けないの?

48 : ◆9999ZEL. :02/07/31 01:19
>>40
indent のために 2byte Space を入れています.
誤動作の原因になりますので,ご注意を...
それと,キャンセルボタンを用意していません.
場合によっては,絶大な破壊力を発揮しますので,お気をつけくださいまし.

>そのまま半角の「ヌ」と「ネ」だね。
雑誌は,もろに化けてましたね.
C7h ,C8h(ASCII) ですが,日本語の半角カタカナとコードが重複しています.

>>47
ほとんど,必要無いです.
一番左のカギは, 長い Script を二行に分けて書くときに CR の代わりに使います.

49 :●~*:02/07/31 02:04
>>31
>display dialog C & " : Creator" & "
>" & T & " : Creator" & "
>" buttons {"Both", "Type", "Creator"}

ふたつ目の改行は不要では?
また、次のように書いた方がスクリプトが見やすいと思う

display dialog C & " : Creator" & return & T & " : Creator" buttons {"Both", "Type", "Creator"}

50 :●~*:02/07/31 02:37
>>31
というわけで、アルゴリズムを変更せずに書き直すとこうなる

property C : {}
property T : {}

tell application "Finder"
display dialog "select the action: Load/Release" buttons {"Load", "Release"}
if button returned of result = "Load" then
set (C, T) to (creator type of selection, file type of selection)
else
set Sel to display dialog C & " : Creator" & return & T & " : Creator" buttons {"Both", "Type", "Creator"}
if button returned of Sel = "Both" then
set (creator type of selection, file type of selection) to (C, T)
else if button returned of Sel = "Type" then
set file type of selection to T
else
set creator type of selection to C
end if
end if
end tell

51 : ◆9999ZEL. :02/07/31 05:06
>>49
重大なミス発覚.
ダイアログの役割をはたしていませんね.
(ボタンに, ' Creator ' が二つ並んでしまう.)
スペルミスいぜんの大失態です.

しかしながら,あの部分の見ずらさには,訳があります.
手早く言うと,Creator と Type をそれぞれ 2 行に分けて表示するためのものです.
普通, Statement の途中に CR(13h) を入れることは許されませんが,
この場合は, "" の間に入っている ただの String として処理されるので,正常に動作します.

52 :にゃあ:02/07/31 05:10
>>51
>ボタンに, ' Creator ' が二つ並んでしまう
がはは
気づきませんでした

53 : ◆9999ZEL. :02/07/31 05:25
>>50
勉強になりました.
確かに,可読性が向上しているし,狙いどうりに動作します.

あとは,あやまって操作してしまう可能性をいかにして取り除くかですね.
それと,できれば, FinderPop からの使用を可能にしたいです.
Clipboard の利用など,いろいろやってみたのですが,失敗続きでした.
(2回の操作をする上でのデータの受け渡しの問題で苦労しています.)

54 :にゃあ:02/07/31 05:31
>>53
まだ気づいてないみたいですね
新板へどうぞ

55 : ◆9999ZEL. :02/07/31 05:37
>>52
訂正:
ボタンではなく,2つのパラメータが
どちらも Creator として表示されてしまう点でした.

56 :にゃあ:02/07/31 05:40
>>55
だから......
新板へどうぞ

57 : ◆9999ZEL. :02/07/31 05:51
>>56
見てきました.
はるかに良くなっていると,思います.
感謝,感謝.

(しかし...忙しい...)

58 :にゃあ:02/07/31 06:26
>>57
新板バージョンにFinderPopを併用した場合、どのあたりでエラーが出ますか?
何行目でエラーが出ると特定していただけるといいのですが......
もし、特定できない場合にはこんな技もありますよ

(1)まず、スクリプト全体をtry〜end tryのハンドラで保護する
この例の場合、下記の書き方でOKです
tell application "Finder"
try
......
on error
end try
end tell
(2)スクリプトの中に適当にダイアログを追加する
ダイアログの内容は何でもかまいませんが
僕は連番を使ったり変数の内容を表示させたりしています
display dialog "1"
......
display dialog "2"
......

DropletなんかだとTheScriptEditorの「履歴」が使えませんから
この方法を使ってどこまで正常に処理しているかを把握しています

59 : ◆9999ZEL. :02/07/31 06:27
>>44
初心者だなんて,ご謙遜を...
僕なんて,さしずめ,無精卵... ぐすん.

60 : ◆9999ZEL. :02/07/31 06:38
>>57
エラーというより,記録されたデータが更新されないようです.
(最後に ScriptEditor で開いた状態のままです.)
研究不足なのでしょうが,AppleScript は,
データの受け渡しが難しいというか,弱点のような気がします.

61 :にゃあ:02/07/31 06:49
>>60
AppleScriptのせいというよりFinderPopが怪しいのでは......
多分、selectionに対して処理を施すっていうFinderPopの仕様に関係しているのではと思います
tell application "Finder"のあとに
set X to selectionという行を入れてみればどうでしょう?

PS.>>57というのは>>58のことですよね
嵐が突っ込まないうちにフォローしときますね

62 : ◆9999ZEL. :02/07/31 07:18
>>61
試してみました.(もちろん, selection を X に置き換えています.)
そうすると,set {C, T} to {creator type of X, file type of X} 以下でエラー発生.
(Run ボタンを押しても同じです.) <-- これで,さんざん悩まされたのでした.

Event Log を見てみると...
tell application "Finder"
get selection
--> {file "untitled" of disk "RAM Disk"}
--> Can't get creator type of {file "untitled" of disk "RAM Disk" of application "Finder"}.
となってます.

63 :にゃあ:02/07/31 07:37
>>62
上記logによると変数の受け渡しは問題ないみたいだし......
僕の環境で検証してみますね

64 :にゃあ:02/07/31 07:59
原因がわかりました
creator type of Xってやつが曲者でした
クリエータタイプを得るには
creator type of file fileNameっていう形式しか使えないのです

set X to selection as strings
if C = {} and T = {} then
set (C, T) to (creator type of file X, file type of file X)

これで大丈夫だと思います


65 : ◆9999ZEL. :02/07/31 08:50
>>64
if C = {} and T = {} then
の部分が,曲者のような気がします.
(最初は,間違いなく null ですが,2回目からは, そうでないので,skip される)

66 :にゃあ:02/07/31 09:22
>>65
>最初は,間違いなく null ですが,2回目からは, そうでないので,skip される
2回目以降はelse以下のブロックが実行されるので問題ないがはずです

いま、新板のバグフィックス版をTheScriptEditor上で検証してみました
file type of file Xのところでエラーが起きますね
file Xをalias Xに書き換えればスクリプトの全文が正常に動作しました
FinderPopではどうでしょう?

67 :にゃあ:02/07/31 09:26
失礼しました。タイプミスです
「問題ないがはずです」は「問題はないはずです」の誤りです

68 : ◆9999ZEL. :02/07/31 09:52
>>66
新板のものをそのまま使って,
set X to selection as text とやったところ,
正常に動作するようになりました. <-- FinderPop でも OK.

それと, 二番目のダイアログのボタンの意味を勘違いしていたので,
誤動作と勘違いしていました.
(Script をよく見れば,わかって当然なのですが... )
失礼しました.

69 : ◆9999ZEL. :02/07/31 10:38
>>66
as alias で試しましたが,FinderPop からでは2番目のダイアログが出ない模様.
as text でも,ちょっと,挙動不審な部分があります.
(' Change ' を選んでも,以前と同じことがある.)
もう少し,追跡調査を続行いたします.

70 :にゃあ:02/07/31 11:40
>>69
>新板のものをそのまま使って,
>set X to selection as text とやったところ,
>正常に動作するようになりました
file type of file Xでひっかからなかったということは
AppleScriptのバージョンアップによってバグが解消されたということですね、きっと
だから7.6.1は......(中略)

>' Change ' を選んでも,以前と同じことがある.
ダイアログを追加してみてください
新板の方には書き忘れてましたので

if button returned of Act = "Change" then
set (C, T) to (creator type of file X, file type of file X)
display dialog C & " : Creator" & return & T & " : FileType" buttons {"OK"} default button 1

このダイアログにより、変数CとTの内容が変更されているか否か確認できます

71 :にゃあ:02/07/31 11:43
勿論、>>69というのは>>68のことですよ(w

72 : ◆9999ZEL. :02/07/31 20:28
>>70
なんだかんだ言っても,一人でシコシコと作り込んでいたりします.
新板のほうでも, Droplet を作っている人がいたりして,これもまた面白いです.
意外と,奥深いテーマになってしまいました...
コアが単純だけに,なんとなくムキになってしまうんですよね.

>ダイアログを追加してみてください
僕は,すべてのダイアログに ' Cancel ' ボタンを付けました.
ただ...原因不明のバグに悩まされています. え〜ん.

73 : ◆9999ZEL. :02/07/31 20:40
>>70
補足:
as string でも,うまくいくようです.
ただ,それに対応して, Type/Creator を取り出すところの表現を
変える必要があるみたいです... もう,何がなんだか...
満足できる物ができあがった時点で,みせっこするのも面白そう...

74 :にゃあ:02/07/31 21:16
>>73
>as string でも,うまくいくようです.
>ただ,それに対応して, Type/Creator を取り出すところの表現を
>変える必要があるみたいです
わかりましたよ。Luciferタン
textテキストとstrings文字列の違いですね
set X to selection as textとした場合は
set (C, T) to (creator type of file X, file type of file X)で正常に動作し
set X to selection as stringsとした場合は
set (C, T) to (creator type of alias X, file type of alias X)で正常に動作します
僕はてっきり、テキストと文字列は同義だと思いこんでましたよ
またひとつ、勉強させてもらいました

>満足できる物ができあがった時点で,みせっこするのも面白そう...
なぁんてこと言わずに、見せて下さいね

75 :にゃあ:02/07/31 21:18
とりあえず、最新アップデート版を掲げておきます

property C : {}
property T : {}

tell application "Finder"
set X to selection as strings
if C = {} and T = {} then
set (C, T) to (creator type of alias X, file type of alias X)
display dialog C & " : Creator" & return & T & " : FileType" buttons {"OK"} default button 1
else
set Act to display dialog C & " : Creator" & return & T & " : FileType" & return & return & "select the action: Cancel/Change/Continue" buttons {"Cancel", "Change", "Continue"} default button 3
if button returned of Act = "Change" then
set (C, T) to (creator type of alias X, file type of alias X)
display dialog C & " : Creator" & return & T & " : FileType" buttons {"OK"} default button 1
else if button returned of Act = "Continue" then
set Sel to display dialog C & " : Creator" & return & T & " : FileType" buttons {"Both", "Type", "Creator"}
if button returned of Sel = "Both" then
set (creator type of alias X, file type of alias X) to (C, T)
else if button returned of Sel = "Type" then
set file type of alias X to T
else
set creator type of alias X to C
end if
end if
end if
end tell

76 : ◆9999ZEL. :02/07/31 22:30
>>74
実は,そこそこのものは,できあがっています.
ただ, else if 〜 の挙動が,今ひとつつかめないので,
単純に, if 〜 else 〜 で,無理にぶん回しています.
そんな訳で,エレガントさとは,ほど遠いものになっていますが...
いっくぜぇ〜 !!!

property T : {}
property C : {}
tell application "Finder"
set X to selection as string
set X to file X
set {Tx, Cx} to {file type of X, creator type of X}
if T = {} and C = {} then
set {T, C} to {Tx, Cx}
end if
display dialog "[Type , Creator]" & return & return ツ
& " [" & Tx & " , " & Cx & "] <-- Selected" & return ツ
& " [" & T & " , " & C & "] <-- Recorded" & return ツ
buttons {"Record", "Cancel", "Change"} default button 2
set Act to button returned of result
if Act = "Record" then
set {T, C} to {Tx, Cx}
else
display dialog "Both of them ?" buttons {"Both", "Cancel", "Choice"} default button 2
set Ans to button returned of result
if Ans = "Both" then
set {file type of X, creator type of X} to {T, C}
else
display dialog "[Type , Creator]" & return & return ツ
& " [" & Tx & " , " & Cx & "] <-- Selected" & return ツ
& " [" & T & " , " & C & "] <-- Recorded" & return ツ
buttons {"Type", "Cancel", "Creator"} default button 2
set Sel to button returned of result
if Sel = "Type" then
set file type of X to T
else
set creator type of X to C
end if
end if
end if
end tell

77 :●~*:02/07/31 22:51
外は夏なのにうすら寒いスレですね。

78 : ◆9999ZEL. :02/07/31 23:01
>>74
>テキストと文字列は同義だと思いこんでましたよ
普通はそうですよね.
AppleScript は OS がらみの操作をするために,そのあたり特殊なのかも知れません.
それにしても, 便利さと,不便さが,隣り合わせですねぇ.
せめて, case とか, choose くらいは用意してほしかったっす.

>{creator type of file X, file type of file X}
この操作は, file に対して行うという点で厳密な感じですね.
当然といえば当然ですが.
ついでながら,僕は,さきに set X to X as file X としてしまいました.

では,さっそく,にゃあさんの Script を試させていただきます.
レポートは,また,のちほど...

79 : ◆9999ZEL. :02/07/31 23:24
>>77
水面下の世界にようこそ !
ところで,おっしゃる意味を理解しかねますが...
(これでよいのだ !!!)

>>75
さっそく,試させていただきました.
FinderPop を使わない限り,完璧っすね.
ちなみに,僕のやつも FinderPop からだと,誤動作をするようです.
AppleScript の変数のくせのせいのような気がいたします.

80 :にゃあ:02/07/31 23:49
>>76>>78-79
このままだとダイアログで"Cancel"を選択したとき処理がキャンセルされません
そこで書き直してみました
尚、FinderPopでの動作も考慮しています

property T : {}
property C : {}

tell application "Finder"
set X to selection
set X to X as string
if T = {} and C = {} then
set {T, C} to {file type of alias X, creator type of alias X}
else
set Act to display dialog "[Type , Creator]" & return & return & " [" & Tx & " , " & Cx & "] <-- Selected" & return & " [" & T & " , " & C & "] <-- Recorded" & return buttons {"Record", "Cancel", "Change"} default button 2
if button returned of Act = "Record" then
set {T, C} to {file type of alias X, creator type of alias X}
else if button returned of Act = "Change" then
set Ans to display dialog "Both of them ?" buttons {"Both", "Cancel", "Choice"} default button 2
if button returned of Ans = "Both" then
set {file type of alias X, creator type of alias X} to {T, C}
else if button returned of Ans = "Choice" then
set Sel to display dialog "[Type , Creator]" & return & return & " [" & Tx & " , " & Cx & "] <-- Selected" & return & " [" & T & " , " & C & "] <-- Recorded" & return buttons {"Type", "Cancel", "Creator"} default button 2
if button returned of Sel = "Type" then
set file type of alias X to T
else
set creator type of alias X to C
end if
end if
end if
end if
end tell

どうでしょう?

81 :にゃあ:02/07/31 23:54
>>79
条件分岐において条件文をふたつ設けたいときは次のように記述します

if 〜 then
......
else if 〜 then
......
end if

ふたつの条件以外の動作を定義したいときは次のように記述します

if 〜 then
......
else if 〜 then
......
else
......
end if

82 : ◆9999ZEL. :02/08/01 18:34
>>80
>"Cancel"を選択したとき処理がキャンセルされません
え" ? ... どうしてですか ???

>どうでしょう?
Run ボタンを押した時,最初は,正常に動作.
しかし,2回めは...

Event Log:

tell application "Finder"
get selection
--> {file "Untitled" of disk "RAM Disk"}
get file "Untitled" of disk "RAM Disk"
--> "RAM Disk:Untitled"
--> The variable Tx is not defined.

83 :にゃあ:02/08/01 20:02
>>82
うぎゃあ〜っ!すいませんですぅ!! 以下の点で深くお詫び申し上げます
(1)display dialogコマンドにおいて"Cancel"ボタンはデフォルトで定義済み
 ということを知りませんでした
(2)変数T、Cの内容と現在選択されているファイルの値とを区別して表示する
 というLuciferタンの意図を理解していませんでした
(3)>>80については動作確認をしていませんでした
 確かに未定義の変数がありますね
はっきり言って、冷水器に工業用水を使うのと同等の横着さでした


ところで、変数T, Cがヌルのときは
選択されているファイルの値を変数T、Cにセットし
直ちにスクリプトを終了した方がよいのではないでしょうか
またこのとき、選択されているファイルの値を表示した上で
変数T、Cにセットするか否かを選択できるようにした方が便利でしょう
書き直してみますね

84 :にゃあ:02/08/01 20:02
property T : {}
property C : {}

tell application "Finder"
set X to selection
set X to file (X as text)
set {Tx, Cx} to {file type of X, creator type of X}
if T = {} and C = {} then
display dialog "[Type , Creator]" & return & return ツ
& " [" & Tx & " , " & Cx & "] <-- Selected" & return ツ
buttons {"Cancel", "Record"} default button 1
if button returned of result = "Record" then set {T, C} to {Tx, Cx}
else
display dialog "[Type , Creator]" & return & return ツ
& " [" & Tx & " , " & Cx & "] <-- Selected" & return ツ
& " [" & T & " , " & C & "] <-- Recorded" & return ツ
buttons {"Record", "Cancel", "Change"} default button 2
set Act to button returned of result
if Act = "Record" then
set {T, C} to {Tx, Cx}
else
display dialog "Both of them ?" buttons {"Both", "Cancel", "Choice"} default button 2
set Ans to button returned of result
if Ans = "Both" then
set {file type of X, creator type of X} to {T, C}
else
display dialog "[Type , Creator]" & return & return ツ
& " [" & Tx & " , " & Cx & "] <-- Selected" & return ツ
& " [" & T & " , " & C & "] <-- Recorded" & return ツ
buttons {"Type", "Cancel", "Creator"} default button 2
set Sel to button returned of result
if Sel = "Type" then
set file type of X to T
else
set creator type of X to C
end if
end if
end if
end if
end tell

今度こそどうでしょう?

85 : ◆9999ZEL. :02/08/01 20:42
>>83
if 〜 else 〜 end if の ネスティング(nesting)
による動作の癖を把握できていないんです.
そのため,複雑な条件分岐をやると,エラー出まくりで...(;_;)

>>84
さっそく試してみます.
レポートは後程...

86 :にゃあ:02/08/01 22:42
>>85
>if 〜 else 〜 end if の ネスティング(nesting)
>による動作の癖を把握できていないんです.
動作の癖ですか......
if A then
 B0
else
 B1
end if
もしAならばB0の処理を行い、もし非AならばB1の処理を行う
もう少し詳しく言うと
もしAならばB0の処理を行ってB1の処理を行わず
もし非AならばB1の処理を行ってB0の処理を行わない、ということになります

ところで>>83(1)の件ですが、もしやと思ってKT7.6.1にて調べてみたところ
日本語表現形式においてはデフォルトで定義済みなのは"キャンセル"ボタンであり
"Cancel"ボタンは未定義でした
逆に、英語表現形式においては"Cancel"ボタンが定義済みで
"キャンセル"ボタンは未定義でした
僕は以前、日本語表現形式を使っており
英語表現形式に乗り換え際、定義済みボタンの逆転に気づかなかったようです
不要な指摘をして申し訳ありませんでした

87 : ◆9999ZEL. :02/08/01 23:43
なんだか,繋がりにくいみたい...

>>86
どうも,すれちがっているようですね.
たとえば,ある条件が false の時,次のダイアログを出さないようにしたいとして...
(ダイアログを出せば,大抵は次に条件分岐になるでしょ.)
すると, if 〜 end if の中に,さらに if 〜 end if が入ることになるでしょ.
これが,複雑化すると, if 〜 end if の対応関係が,しばしばわかりずらくなって,
その結果,syntax error 出まくりで頭を抱え込むことになると言うわけでして...
(要は else if の挙動がつかめていないということです.)

>日本語表現形式においてはデフォルトで定義済みなのは"キャンセル"ボタンであり
Script に日本語表現を持ち込むのは,ちょっと...
(混乱が生じる結果となってしまったのは事実だと思いますので.)
リファレンスに対応表が乗っていましたが, " ??? " な感じでした.
仮に, sin(x) を日本語表現にしたとしたら...

88 :にゃあ:02/08/02 00:36
>>87
やっぱり繋がりにくいです?
いやぁ、愛機ThinkPadがご臨終間際なのかと疑いました(w

>これが,複雑化すると, if 〜 end if の対応関係が,しばしばわかりずらくなって,
僕が使ってる技はごく単純ですが......。例えば
tell app"finder"と入力したら、すかさずreturnを2回押てしendと入力し、ここで構文チェック
if 〜 thenと入力したら、returnを1回押してからelseと入力し
更にreturnを2回押してendを入力し、ここで構文チェック
こうすればハンドラの入れ子構造を把握しやすくなり
スクリプト全体を見渡すのが容易になります
あとは空白行に処理内容を記述するだけです
一度試してみてください

英語表現形式に移行したのは「AppleScriptリファレンス」を購入するかなり前でした
表現形式の違いはTheScriptEditorが吸収してくれるのに加えて
実際のところ、かつて書いたどのスクリプトも動作に支障はありませんでしたから
何ら疑問を抱くことなく今日に至った次第です
いまではすっかり英語表現に馴染んだと思っていましたが......
まだまだ勉強不足です

89 :にゃあ:02/08/02 02:42
ごめんなさい
「if 〜 thenと入力したら、returnを1回押してから」は
「if 〜 thenと入力したら、returnを2回押して」の間違いでした

90 : ◆9999ZEL. :02/08/02 06:09
昨日は,アクセス状況が悪かったので,早めに寝込んでしまいました.

>>80
で,改良版のレポートですが,うまくいっているようです.
ただ... 改良の成果を確認できるのは,最初の一回だけ...
次からは, T, C 共に null ではないので,ダイアログさえも出ない...
T, Cの情報は,リスタートしても,ちゃんと保持されているようです.

ちなみに,僕が書いたものも,問題がないようです.
誤動作してみたり,正常だったり...どうなってるの?

>>88
>あとは空白行に処理内容を記述するだけです
そういえば, FileMaker では,自動的に End 〜 が入るようになってました.
Syntax Error 防止には,確かに効果がありそうですね.
これから,そうするように心がけます. アドバイス,ありがとうございます.

あと, >>81 を見て,ふと,思ったのですが, end if が一つしかない...
ということは, もしかして...
else if がたくさん入るような nesting をやっても,end if は,一つ ?
さっそく,じっけ〜ん.

91 :にゃあ:02/08/02 15:07
昨夜から今朝にかけて、アクセス状況が最悪でしたね

>>90
>FileMaker では,自動的に End 〜 が入るようになってました.
僕も、そこからヒントを得ました

92 : ◆9999ZEL. :02/08/02 18:01
" AppleScript " で, Finder Preference の ラベルの色設定ができるようです.
これは,おもしろそう... System を作りなおした時などに便利.
ところが,ところが... AppleScript の色指定は,10 進数表示.
なんとか 16 進数表示にできないものか... <-- FileMaker で,すでにやっている.
(10進数表示で,数値を 1 だけ変化させても,結果が変化しないことが多いため.)

... え〜ん...Type Mismatch Error ばっかり...
(display dialog 〜 を Subroutin 化しようとしてまふ.)

93 :にゃあ:02/08/02 20:39
>>92
今晩は、Luciferタン

>display dialog 〜 を Subroutin 化しようとしてまふ
新板の暇野郎氏がされてましたね。あれを参考にして汎用化してみました

set {mes, btn, dfbtn, timer} to {......, ......, ......, ......,}
dialog(mes, btn, dfbtn, timer)

on dialog(mes, btn, dfbtn, timer)
display dialog mes buttons btn default button dfbtn giving up after timer
end dialog

これならどんな場面でも使えると思います

94 :にゃあ:02/08/02 21:36
>>90
>ただ... 改良の成果を確認できるのは,最初の一回だけ...
>次からは, T, C 共に null ではないので,ダイアログさえも出ない...
おかしいですね
>>84の最新アップデート版を試していただけましたか?
念のためにOS8.6上で動作確認をしたところ、全く正常なのですが......

95 : ◆9999ZEL. :02/08/02 22:15
>>93
>新板の暇野郎氏がされてましたね。
あれ,強烈なジョークです.
真っ白なダイアログを出したまま,一時間もぼーっと待つ人など,いないでしょう.
大抵は, すぐに,OK ボタンを押してしまうので,
何のことやらさっぱり...てな事になってしまう.

>これならどんな場面でも使えると思います
リファレンスをこの形で書いてくれていたら...
(つまらないエラーの原因がわからずに,苦労しました...でも,ようやく...)

>>94
>おかしいですね
ん? なにか,勘違いしてたのだろうか?...
でも,今日は頭が働きません.
エラー出まくりで,ストレスたまりました. あんぎゃ〜 !!!

96 :にゃあ:02/08/02 23:13
>>95
>リファレンスをこの形で書いてくれていたら...
あの本は、どちらかというと個々の事例について解説するのに腐心していますから
汎用的構文に関しては各自で研究するより術がないでしょうね

「汎用的構文」で思い出しましたが、よく使う構文は毎回手入力するのが面倒なので
SimpleTextのファイルにイディオム集として纏めておき
必要なときにそこからコピーしています
例えば、エラー時に詳細なエラー内容を表示させようとすると1行や2行ではすみません
でも手製イディオム集があれば、ただコピペするだけです
重宝しますよ

昨夜から今朝にかけて2chへのアクセス状況が最悪だったので
いつもは2chに費やす時間を別のことをするのに割り当てました
PM7600のリストアと再バックアップをしたりとか
2週間ほど前から取掛かっているスクリプトを完成させたりとか......
ところでこのスクリプトがまた長大で
あまりの長さに故に新板へ掲げるのを躊躇しています

>エラー出まくりで,ストレスたまりました. あんぎゃ〜 !!!
エラー程度なら、精神衛生上まだまだ許容できますよ
僕なんか、上記スクリプトのお陰でフリーズしまくりでした
ふんぎゃあ〜っ!!!

97 : ◆9999ZEL. :02/08/03 06:24
>>95
リファレンスについて,追加注文...
HDD に納まる辞書のような形になっていたら最高.
こうなったら,自分で HTML 化... <-- いつも,こんな形で横道にそれるのです.

>SimpleTextのファイルにイディオム集として纏めておき
良く似たことをやっています. ただし,蓄積量は zero に等しいですが...
ところで,SimpleText って,D&D で, Cut & Paste できなかったですよね.
WorldText も TheScriptEditor も同様... <-- 例によって,手抜きしているのかな?
これができるのと,できないのとでは作業効率が大違い.
' Mi ' も良いとのことでしたが,使いなれないものは勝手が違うようで HDD の肥やし.

>PM7600のリストアと再バックアップをしたりとか
具体的に,どんな感じでやってますか?
僕は,ふと,思い立って Partition の切り直しをおっぱじめてしまう事が多いです.
この時,バックアップは当然のようにやるのですが,いつも忘れ物を...
あとになって,その忘れ物を必死で捜し回ることしばし.

>あまりの長さに故に新板へ掲げるのを躊躇しています
いわゆる,鬼畜 Script っすね.
ところで,フリーズしまくるスクリプトって...???

98 :にゃあ:02/08/03 09:34
>>97
>具体的に,どんな感じでやってますか?
KT7.1〜OS7.6.1の場合、更新頻度の高いボリュームは中身を非圧縮でコピーし
起動ボリュームやアプリケーションボリュームなどのファイル構成をあまり変更しないものは
ボリュームの中身全てを自己解凍形式にて圧縮しています
バックアップファイルの保管場所については、リストアの頻度によって異なります
リストア頻度の低いものはMO・PD・DVD-RAMなどのリムーバブルメディアのみに置き
リストア頻度の高いものは原則としてHDDとMO・PD・DVD-RAMとを併用し、二重にバックアップしています
但し、PM7600上にあるFileMakerやワープロなどの書類に関しては
127MBに切ったHDDのパーティション4個を用い、その中のひとつに最新バージョンのバックアップを置き
他には3つ前までのバージョンを保存しています
また最新バージョンはZipメディアにもバックアップを取り
これが他のMacへのデータ受け渡しをも兼用しています
これらの書類はAppleScriptでバックアップを制御しているのですが
そのスクリプトにはいまだにバグが散見しますね
アーカイバは定番のStuffItではなく、いまは懐かしいNorton Disk Doubler Proを愛用しています
StuffItはアイコンの位置をを正確に再現しないので好みません
一方Norton Disk Doubler Proはデスクトップファイルの保存について厳密のようです
圧縮率は最高に設定しており、ノーマルの68K Macでは気が遠くなるほど時間を要するのが難点です
先々月にPowerBook140の内蔵HDDにある20数MBのデータを圧縮したところ、なんと6時間以上もかかりました
G3カードを装着したMacは、100MB程度のデータならタバコを一本吸い終わるまで待つ必要がありませんが......
各Macにおいて複数のHDDを繋ぎ、最低2つ以上の起動ボリュームを置くようにしていますから
リストアするのも簡単です
幾度かフリーズを繰返したとき、転ばぬ先の杖ということで
起動ボリュームと作業で用いたボリュームをリストアしています
リストアの手順は次の通りです
(1)当該パーティションをB'sCrewで削除する
(2)新規パーティションを作成し、以前と同じ名前を付ける
(3)アーカイブを解凍する。または、非圧縮ファイルをコピーする
(4)Speed Diskでデフラグする
バックアップを取るときは、上記に加えて以下の手順を踏みます
(5)アプリケーションや書類を追加し、諸設定を行う
(6)Norton Disk Doctorでボリュームを診断する
(7)自己解凍形式で圧縮する。または、非圧縮でコピーする
バックアップとリストア、パーティションの削除と新規作成
これらをこまめに行っているので、Macを使い始めてからこの方、HDDのクラッシュとは無縁ですね

99 :にゃあ:02/08/03 10:18
>>97
>こうなったら,自分で HTML 化...
うわぁ。遠大な野望ですね

>ところで,SimpleText って,D&D で, Cut & Paste できなかったですよね.
僕はドラッグ・アンド・ドロップが普及する前からMacを使っているので......
オールドなMacにはコピペが似合います(w
それより、AppleScriptに対応して欲しいですね

>いわゆる,鬼畜 Script っすね.
そう。はっきり言って、僕は鬼畜です
今夜も防音設備完備の地下室で、いたいけな雌奴隷を......(爆)

>ところで,フリーズしまくるスクリプトって...???
AppleScript's text item delimitersを使って指定した文字列を削除する、という部分を含むスクリプトです
一応完成し、全く正常に動作するのですが
その部分を別の場所へ移動させた方がアルゴリズム的に美しいかと思い、カット・アンド・ペーストを敢行したところ......
MacsBugの野郎は「バスエラーで、なんたらかんたら〜」とぬかしてました
何度スクリプトを見直してもアルゴリズムに問題は見当たらないし、何度実行しても同一の箇所でフリーズします
諦めて元に戻しました

100 :にゃあ:02/08/03 12:59
先月実家に帰った際
某社製ワープロ専用機上にあるデータベースの内容をMacに取り込めないものか、と父が宣いました
データベースの内容をワープロ専用機で一旦文書ファイルに変換し
それを更にDOSテキストに変換してフロッピー経由で宛名職人やFileMakerへインポート
という図式を念頭にして実行に移してみました
すると、書き出されたテキストファイルはタブ区切りなどではなく
フィールドの空白部分が文字通りの空白文字で埋め尽くされているという全く酷い代物でした
住所録に関しては、FileMakerとカラーメニュー化したSimpleText、ClarisWorksの表計算
これらを組み合わせて手作業にて整形しました
けれどもビデオテープライブラリに関しては、データ量が膨大で手作業など望むべくもありません
そこでAppleScriptによるテキスト整形ツールを作ろうと考えたわけです
任意の行数のヘッダを削除、任意の間隔でタブとリターンを挿入、スペースの削除
いくつかのコアに分けて動作を確認し、それらを結合してオプションを加える
最初のバージョンが完成しつつあったとき、ひとつのの思いがいや増しに増しました
これだけ労力を費やしているのだから、様々な場面での使用に耐え得る汎用的なものを作ろう、と
三つ目のバージョンが完成したとき、より美しいアルゴリズムへのアイディアが浮かんできました
昨日の朝のことです
結果は......ブリザードに見舞われました
どっと疲労感に襲われ、原因の追及と対処法の検討は放棄
敵前逃亡ですね
その代わり、DOSテキストの不要な改行コードを除去した上で
SimpleText書類として保存する、というスクリプトを書きました
こちらの方は昨晩も早速使いましたが、出来栄えの良さに満足しています

というわけで100到達おめでとうございます

319 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)