cgi のスクリプトを作成していて、cgi 間でテンポラリファイルを受け渡す必要が出てきた。純粋に cgi 間のデータの受け渡しであれば POST で行えばよいのだが、今回は最初の cgi が外部ソフトを呼び出してデータ(ファイル)の加工を行なわせ、その出力(ファイル)を次の cgi に渡すので、POST 経由だと周りくどい。
普通であれば、Tempfile を使えば一発なのだが、Tempfile はご丁寧にスクリプトの実行が終わると自動的にファイルを削除してくれる。そのため、次の cgi が走ったときには消されてしまっている。
苦肉の策で考えたのが下記のスクリプト。もっと良い方法がありそうなきもするけど。
temp_name = ''
Tempfile.open('') {|f| temp_name = f.path+'.tmp'}
るびぎなー
2011年5月4日水曜日
2010年8月19日木曜日
ワードにつけたコメントのイニシャルを変える
RubyスクリプトからOLEをつかってWordにコメントを付ける際に、
デフォルトのイニシャルから変更するには下記のようにすればよい。
com_idx = wdoc.Comments.Add(range, text).index
wdoc.Comments(com_idx).Initial = 'initial'
コメントのindex番号は、ファイルの最初から順番になるように常にrenumberされるため、
以下のようにコメントの数を自分でカウントする方法は、
コメントを付ける場所が行ったり来たりしたり、既にコメントが入っていた場合破綻する。
〜.each do |com_idx|
wdoc.Comments.Add(range, text)
wdoc.Comments(com_idx).Initial = 'initial'
end
キー入力を待ってポーズ
参照頁 http://lldev.jp/ruby/tips/miscellaneous.html
require 'Win32API'
kbhit = Win32API.new('msvcrt','_kbhit',[],'l')
print '続行するには何かキーを押してください'
while true
if kbhit.call != 0
break
end
end
puts "\nキーが押されました"
2010年8月13日金曜日
MeCabの辞書
当然のことながらMeCabの解析精度は使う辞書に依存する。
を参考に、UniDic現代語版(http://www.tokuteicorpus.jp/dist/)を使うことに。
ユーザー登録して、個別ファイル→unidic-mecab→unidic-mecab*_sjis.zip をダウンロード。
フォルダ dic\ipadic に中身を展開。
スタートメニュー MeCab → Recompile Shift_Jis Dictionary を実行
2010年8月12日木曜日
MeCab(形態素解析エンジン)をRuby(windows)でつかう
MeCab(http://mecab.sourceforge.net/)を、Rubyから使うことにトライ。
Windowsでは、mecab-rubyがうまく働かないらしい。
代わりに、こちら(http://nlp.sfc.keio.ac.jp/~aihara/nlp.html)にある、
dll経由でいじるスクリプトを使おうと思ったが、
どうも1.9.1では動かないらしい。。。
結局、こっち(file:///C:/Documents%20and%20Settings/060057/My%20Documents/ScrapBook/data/20100812121709/index.html)を参考にテンポラリファイルを介して、
いじる方法を使うことにした。
RubyでExcelにアクセスする
Rubyでアクセスするには XLS.rb(http://github.com/bash0C7/XLS/blob/master/xls.rb?locale=ja)を使うと、
一行ごとに'タイトル'=>'値'のハッシュが得られて便利。
ただ、一列目に空白セルがあるとそこで読み込みが終わってしまうので注意!
2010年8月11日水曜日
Rubyからパラグラフを取得する方法
すぐに忘れてしまうので、メモ
#! ruby -Ks
# -*- coding: cp932 -*-
require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
path = fso.GetAbsolutePathName(ARGV[0])
word = WIN32OLE.new('Word.Application')
word.visible = false
doc = word.Documents.Open(path)
begin
doc.Activate
idx = 1
doc.Paragraphs.each do |para|
puts para.Range.Text
puts doc.Paragraphs(idx).Range.Text
idx += 1
break if idx > 20
end
ensure
doc.Close
word.Quit
end
登録:
投稿 (Atom)