ApplescriputからRubyへ引数を渡す

投稿日時:
» 5546
[5546]ApplescriputからRubyへ引数を渡す 投稿者:クロネコ 投稿日:08/04/14-18:05
お知恵を拝借下さい。
Applescriptのドロップレットにテキストファイルを投げ込み、
正規表現で検索置換してテキストを整形させるRubyスクリプトに
do shell scriptでリダイレクトさせる形で処理させようとしています。
処理したファイルの保存先を指定するために、ドロップで得られた
整形対象のテキストのパス(下記スクリプトで『obj』)をRubyに
引数として渡したいのですが、どうもうまくいきません。

以下Applescriptの構文──────

on open drop_items
tell application "Finder"
repeat with obj in drop_items
end repeat
set obj to POSIX path of obj
do shell script "ruby " & "/フルパス/test.rb" & " < " & obj
end tell
end open

以上────────────

処理させたいrubyスクリプトは、処理目的別にドロップレットをいくつか
作れば良いので固定でいいんですが、保存先は編集対象のテキストの
カレントディレクトリにしたいのでパスを引数として渡したいのです。

ruby側で頭に

fullpass = ARGV[0]

で『obj』を受け取れると思ったのですが、これでは不足でしょうか?
テキストに出力させてみたところ、何も出てきませんでしたので受け
取れていないものと思います。

長文失礼しました。よろしくお願い致します。
» 5547
[5547]Re: ApplescriputからRubyへ引数を渡す 投稿者:匿名A 投稿日:08/04/14-20:47
書き出すファイル名を変数に入れて、rubyからそこにリダイレクトさせればよさそうな気がしますが。
» 5548
[5548]Re: ApplescriputからRubyへ引数を渡す 投稿者:せうぞー 投稿日:08/04/14-21:33
おしい。もう一歩。

> do shell script "ruby " & "/フルパス/test.rb" & " < " & obj

この時、ruby側で標準出力されたものを受ける受け皿がありません。
別ファイルへリダイレクトするか、do shell scriptの返り値をAS側内で書き込み処理するかどちらかです。
手元にまんま答えがあるんですが、もう少し考えてみてください。
解答にたどり着くまでに、きっとたくさんの成果を手にできますよ。

あ、杞憂ですが、
http://www.seuzo.jp/rubbs/search_html/msg01621.html
ことにも一応注意を払われるといいかもしれません。
» 5549
[5549]Re^2: ApplescriputからRubyへ引数を渡す 投稿者:せうぞー 投稿日:08/04/14-21:43
補足。
あ、もしかして、ruby側でファイルハンドルを開いていたりするんでしょうか?
だとしたら、rubyの方をみないと、なんでファイルが書き込まれないのかわかりませんけれど。
» 5550
[5550]Re^3: ApplescriputからRubyへ引数を渡す 投稿者:匿名A 投稿日:08/04/14-23:39
ruby側にファイル名を渡して、それに書き込もうとしているという所だと思いますよ^^。
» 5552
[5552]Re^4: ApplescriputからRubyへ引数を渡す 投稿者:クロネコ 投稿日:08/04/15-11:02
せうぞーさん、匿名Aさん、ありがとうございます。
文字コードの件は必ず最終的に反映させていただきたいと思います。
ありがとうございます。

> あ、もしかして、ruby側でファイルハンドルを開いていたりするんでしょうか?
> だとしたら、rubyの方をみないと、なんでファイルが書き込まれないのかわかりませんけれど。

> ruby側にファイル名を渡して、それに書き込もうとしているという所だと思いますよ^^。

はい、最終的にはそういう事をしたいと思っています。Rubyからファイル
を書き出す動作を指せようとしている状態です、説明不足ですみません。

以下Rubyの構文─────────
moji = Array.new
fullpass = ARGV[0] # ここで引数を受け取るつもりでした
while line = gets # 正規表現の文字処理の実験部分です
      if /^\w\w\w$/ =~ line
      moji << line
      end
   end
File.open("フルパス/foo.txt" , "w") {|file|
   file.write fullpass # とりあえずfoo.txtに書き込ませる事で受け渡しできるかどうか確認しようとしてます
   file.write moji # 文字処理の実験部分は正常に動作し書き込まれてます
}

以上───────────────

rubyの中核の文字処理部分については、ただの正規表現の動作の実験という
だけで特に意味はありません。全体の動作の実験の中のひとつです。

・編集対象のテキストファイルをドロップする
    ↓
・Applescriptでrubyにリダイレクトさせてパスを引数としてrubyに渡す
    ↓
・rubyがファイルを処理し引数(パス)を使って編集されたテキスト
 ファイルを編集元のカレントディレクトリに新規作成する
    ↓
・動作完了

とりあえず細かい部分は置いておいて、この動作をするところまでは
まず完成させたい、と思っています。

具体的には、本来は『File.open("フルパス/foo.txt" , "w") {|file|』の
「フルパス/foo.txt」部分に受け渡した引数を置いて、末尾に記号か数字を
くっつけてちょろっとファイル名を改変し、編集後のテキストを
編集前のテキストのカレントディレクトリに作らせたい、と考えています。

そうなっていないじゃないか!と怒られそうですが、今引数が果たして
ApplescriptからRubyに受け渡されているのかどうかの確認が取れず、
安直に確認する方法としてテキストとして書き込ませよう、という
事をrubyの中でしています。が、現状、処理されたテキストはfoo.txtに
書き込まれるのですが"fullpass"については何の反応も無いです。

とりあえず、ApplesceipからRubyへの引数の受け渡しがまともにできて
いるのか、それともRubyでの確認の仕方に問題があるのか、あるいは他に
問題があるのかサッパリ分からずに往生しております。
何度もすみませんが、ヒントをいただけないでしょうか。
よろしくお願い致します。
» 5553
[5553]Re^5: ApplescriputからRubyへ引数を渡す 投稿者:匿名A 投稿日:08/04/15-11:17
せうぞーさんや私が言わんとしているのは、

ruby側では標準出力へ書き出す
それをシェル側でファイルにする(リダイレクト)

でいいんじゃない? ということです。
こうすれば、引き数としてrubyにファイル名を渡す必要はありません。
» 5557
[5557]Re^5: ApplescriputからRubyへ引数を渡す 投稿者:せうぞー 投稿日:08/04/15-15:08
匿名Aさんがおっしゃるように、新規ファイルの生成をリダイレクトしてもよいし、わたしだったらAS内でやるのが好きです。Finderが既成ファイルの有無を調べてくれるし、ファイル名も入力できるから。

しかし、ruby内でやることも可能。ただし示してあるスクリプトではうまくいきません。


> while line = gets # 正規表現の文字処理の実験部分です

まずここを
while line = ARGF.getsにしてみてください。
どういう意味かは本などを読んでください。
それから
   file.write fullpass
の行はいりません。ですから2行目の
fullpass = ARGV[0]
も要りません。
フルパス/foo.txtをwriteで開いているので、そこに書き込まれます。

ざっくり簡単ですが、やりたいことをひとつひとつ積み上げるようにしてみてください。
» 5560
[5560]Re^6: ApplescriputからRubyへ引数を渡す 投稿者:クロネコ 投稿日:08/04/15-22:18
せうぞーさん、匿名Aさん、ありがとうございます。

Applescriptは受け渡しの道具くらいにしか思ってなかったので…
もう少し仕事をさせた方がいいんですね。
うーん。スイマセン、付け焼き刃なのですぐには理解できないんですが
いただいたヒントから取り組んでみます。
ありがとうございます。
» 5561
[5561]Re^7: ApplescriputからRubyへ引数を渡す 投稿者:せうぞー 投稿日:08/04/16-14:50
> いただいたヒントから取り組んでみます。

ご自分で見つけた答えが、きっと最適解なんだと思いますが、
次善の解として、わたしの解法も公開しておきます。
自分の解法と他人の解法を見比べるのも、とても勉強になります。
がんばってください。
http://d.hatena.ne.jp/seuzo/20080415/1208243623
» 5571
[5571]Re^8: ApplescriputからRubyへ引数を渡す 投稿者:クロネコ 投稿日:08/04/18-10:38
> せうぞーさん

わ。恐縮です。
後々の応用もありますのでなるべく自分で理解を深めつつ解答を探って
参りますが、人様の事例を参考にさせていただけるのはとても有り難い
です。

慣れないもので孤独で味に辛い作業ですが、励みになりました。
ありがとうございます。がんばってみます。

このページをシェア