module Rrx で定義されている各種メソッド
最終更新日: 2014/11/09
Rrxモジュールでは、1) Rrx, 2) Rclip の2つのモジュールが定義されています。
後者はクリップボードを扱うためのモジュールです。MS-Windows専用で、user32.dll, kernel32.dll, msvcrt.dll を利用します。
《目次》
- 1. module Rrx
- (1) rexec(script, logname=nil, options=nil)
- (2) rencode(str)
- (3) file_read(filename)
- (4) to_num(x)
- (5) str2ary(str, sep=nil)
- (6) ary2str(aa, sep=’,’)
- (7) temp_make(str, ext, flag)
- (8) temp_read(ff)
- (9) temp_write(ff, str)
- (10) temp_delete(ff)
- (11) temp_delete_all()
- (12) クラス変数にアクセスするための各種メソッド
- (13) rsave(hs = nil)
- (14) rload(sw = nil)
- (15) del_sum(ary)
- (16) cut_num(), cut_table()
- (17) cut_data()
- (18) select_cells(ary, condition, flag=nil)
- (19) table_turn(ary)
- (20) del_row(ary, *nums)
- (21) del_col(ary, *nums)
- (22) ins_row(ary, n, *arg)
- (23) ins_col(ary, n, *arg)
- (24) r_each(argsize), robj_each(argsize)
- (25) xls2ary(target, fmt = :array)
- (26) gss2ary(target, opt = nil, fmt = :array)
- (27) get_web(url, res_type = nil, opt = nil)
- (28) http_opt(opt)
- (29) web2ary(url, regex=nil, count=nil)
- (30) nkfex(str, enc=”utf-8”)
- (31) to_rba(xx, type)
- (32) clp2str()
- (33) str2clp(str)
- (34) array2table(aa, *arg)
- (35) matrix2table(aa, *arg)
- (36) html_string(param)
- (37) html_template(enc=nil, *arg)
- (38) tex_template(dclass=nil)
- (39) text_table(ary, header = nil, sep = nil)
- (40) time2str(x)
- (41) to_enc(str)
- (42) to_rex(x)
- (43) xls2tmp(target, sn, ftype)
- (44) htm2tmp(target, reg, sn, ftype)
- (45) web2file(url)
- (46) kramdown_html(str, *opt)
- (47) kramdown_tex(str, *opt)
- (48) kramdown_contents(str)
- (49) pandoc_convert(str, *opt_ary)
- (50) pandoc_html(str, *opt_ary)
- (51) pandoc_tex(str, *opt_ary)
- (52) pandoc_docx(str, *opt_ary)
- (53) erb_three(str)
- 2. module Rclip
1. module Rrx
多くは統計解析ソフトRを利用するためのメソッドだが、その他に、解析結果を文書化するための markdown, html, LaTeX, MS-Word に関連するものもある。
(1) rexec(script, logname=nil, options=nil)
- 機能: Rプログラムを実行する
- script: Rプログラムの本体(文字列)または “test.r” などのファイル名。
- logname: ログファイルの名前。例えば “log.txt”
- options: Rcmd.exeの起動オプション。nilの場合 “–no-save -q” となる。
- 戻り値: Hash。hs[:log], hs[:sink] などが得られる。詳細は rubyから統計解析ソフトRを使う 参照。
- 利用例: hs = rexec(“test.r”, “log.txt”)
(2) rencode(str)
- 機能: 与えられた文字列の文字コードをrrx*.rbの文字コードと同じものに変換する。
- str: 文字列
- 戻り値: 文字コード変換を施した文字列
- 利用例: str2 = rencode(str)
- 備考: Windows-31J, utf-8, euc-jp の3種類に対応。変換は nkf で行う。
(3) file_read(filename)
- 機能: ファイルをテキストモードで読み込む。バイナリモードではない。
- filename: ファイル名
- 戻り値: ファイルを読み込んだ中身を文字列で返す。前述の rencode() を施したものを返す。
- 利用例: str = file_read(“test.txt”)
(4) to_num(x)
- 機能: rubyの文字列を数値に変換する。数値と解釈できないものは変換しない。
- x: rubyの文字列または配列。配列の場合は各要素をチェックして、数値化できる文字列であれば数値に変換し、配列であればその中身を再起的にチェック・変換する。それ以外なら変換しない。
- 戻り値: 数値または配列。引数xが配列であれば配列を返す。数値として解釈できないものは、変換せず元のままを返す。
- 利用例: num = to_num(“3.14”)
ary = to_num([“123”, “list”, “0.25”, “78.9e-04”])
- 備考: 従来の ary2num() を廃止し、to_num() で同様のことができるようにした。
桁区切りのカンマ記号が入っていると、意図した数値にならないので注意。予めカンマを取り除いておくのが望ましい。
”12.0” とか “45.00” などのように、小数点以下がゼロのみの場合は、float ではなく integer に変換するので注意されたい。
(5) str2ary(str, sep=nil)
- 機能: 文字列を配列に変換する。
- str: 文字列
- sep: フィールドセパレータ(区切り文字)。nilの時は自動判別。strの中にタブコードが多く含まれていればタブコード、カンマが多ければカンマになる。
- 戻り値: 変換結果である配列
- 利用例: ary = str2ary(str)
- 備考: rubyの標準添付ライブラリ csv を利用して変換する。
(6) ary2str(aa, sep=’,’)
- 機能: 配列を文字列に変換する。
- aa: 配列
- sep: フィールドセパレータ。デフォルトはカンマ。
- 戻り値: 配列を変換した文字列
- 利用例: str = ary2str(aa, “¥t”)
- 備考: rubyの標準添付ライブラリ csv を利用して変換する。
(7) temp_make(str, ext, flag)
- 機能: テンポラリファイルの新規作成。標準添付ライブラリ tempfile によって作成される。新規作成されたファイルは close された状態。
- str: テンポラリファイルに書き込む文字列。省略可。省略時はサイズ0のファイルが作成される。2次元配列を与えることもできる。
- ext: テンポラリファイルの拡張子。省略可。 ‘.csv’ とか ‘.txt’ のような文字列、または :csv や :txt のようなシンボルで指定する。
- flag: 最新のテンポラリファイルとして登録するか否かの指定。trueだと最新のものとして登録。falseだと登録しない。指定しない時は true とみなされる。最新のものとして登録されると、Rプログラム中の「@@last@@」でそのファイル名を参照できる。
- 戻り値: テンポラリファイルを示すオブジェクト
- 利用例: tff = temp_make()
tff = temp_make(“abc”, “.csv”, false)
tff = temp_make(“abc”)
tff = temp_make(“.txt”, true)
- 備考: 引数を与える順番は任意。 ‘.’ で始まる文字列は拡張子の指定とみなされる。
(8) temp_read(ff)
- 機能: テンポラリファイルの中身を文字列で返す
- ff: tempfileオブジェクト。temp_make() の戻り値を指定する。
- 戻り値: 読み込んだ文字列
- 利用例: str = temp_read(tff)
(9) temp_write(ff, str)
- 機能: テンポラリファイルに書き込む。上書きする。追加ではない。
- ff: tempfileオブジェクト
- str: 書き込むデータ
- 戻り値: 書き込んだ文字列のバイト数が返される。書き込みできなかった時は nil または false
- 利用例: temp_write(tff, “abc”)
(10) temp_delete(ff)
- 機能: テンポラリファイルの削除
- ff: tempfileオブジェクト
- 戻り値: 不定
- 利用例: temp_delete(tff)
- 備考: 引数ffを省略すると、temp_make() で作成したテンポラリファイルがすべて削除される。
目次に戻る
(11) temp_delete_all()
- 機能: ファイル名の先頭が「rrx_」であるテンポラリファイルをすべて削除
- 戻り値: 不定
- 備考: テンポラリファイルが作成されるディレクトリの中で、ファイル名の先頭が「rrx_」であるファイルをすべて削除する。何らかのトラブルでrubyスクリプトが正常に終了しなかったとき、念のためこのメソッドを呼び出すと、過去に作られたテンポラリファイルもすべて削除される。
(12) クラス変数にアクセスするための各種メソッド
Rrxには次のクラス変数がある。
- path: Rcmd.exeのフルパス。文字列。デフォルトは nil。
- opt: Rcmd.exeの起動オプション。文字列。デフォルトは nil。これがnilでなければ、Rcmd.exeの起動オプションとして採用される。
- log: ログファイルの名前。文字列。デフォルトは nil。これがnilでなければ、ログファイル名として採用される。
- encopt: Rcmd.exeの起動オプションとして「–encoding=cp932」などのエンコード指定を行うか否かの指定。デフォルトは true。trueだとエンコード指定が行われ、falseだと行われない。旧いRではエンコード指定できないので false にする。
- 備考: rexec() でログファイル名とオプションが指定された場合は、クラス変数の log, opt よりも優先される。
- 利用例: path = Rrx.path(); opt = Rrx.opt()
Rrx.opt = “–vanilla -q”
Rrx.log = “r_log.txt”
Rrx.encopt = false
(13) rsave(hs = nil)
- 機能: rrx.cfgの保存。各クラス変数の値がrrx.cfgに書き出される。rrx.cfgは、rrx*.rbが存在するのと同じディレクトリに書き出される。
- hs: 引数が省略されたり nil の場合は、すべてのクラス変数が書き出される。hsがハッシュで与えられると、それに従って書き出す。ハッシュは、キーをシンボルにする。
hs = {:opt=>”–vanilla -q”, :log=>”r_log.txt”}
- 戻り値: 不定
- 利用例: rsave()
rsave( {:opt=>”–vanilla -q”, :log=>”r_log.txt”} )
- 備考: セーブされたrrx.cfgの中身は、rexec() でRプログラムが実行される際に常に参照される。ただし、既にクラス変数に値がセットされている時は、そちらが優先される。
(14) rload(sw = nil)
- 機能: rrx.cfgの読込み
- sw: 引数が :set だと、rrx.cfgを読み込んだ結果をクラス変数に代入する。ただし、既にクラス変数に値がセットされていれば、それは変更されない。この引数を省略した場合は、クラス変数への代入が行われない。
- 戻り値: ハッシュ。hs[:path], hs[:opt] などが得られる。
- 利用例: hs = rload()
rload(:set)
(15) del_sum(ary)
- 機能: 2次元配列の合計欄を削除
- ary: 2次元配列
- 戻り値: 合計欄を削除した2次元配列
- 利用例: ary2 = del_sum(ary)
- 備考: 横方向と縦方向の合計欄を削除する。実際に足し算をやってみて、どの列も(あるいは、どの行も)合計だと判断されれば、該当の列または行を削除する。まず最右端の列を調べ、次に最下行を調べる。両方とも合計欄でなければ、今度は最左端の列、最上行を調べる。
(16) cut_num(), cut_table()
空欄を含まない行列であって、数値からなる行列を切り取る(矩形選択の自動化)。
cut_num() の方は、数値だけから構成される行列を切り取る。cut_table() は、行列の左と上に項目名があると、それも一緒に切り取る。
また、行列の中に合計欄があると判断される場合は、その合計欄の行または列を削除する。
これらメソッドの詳細については rubyから統計解析ソフトRを使う を参照。
cut_table() は、実は cut_num2() の別名定義。
解説ドキュメントで言及していないが、これらメソッドには任意の個数の引数を与えることができる。例えば次のとおり。
cut_num("data01.csv", "data02.txt", "data03.csv")
cut_table("data01.csv", "data02.txt", "data03.csv", 3)
最後の引数として数値(1, 2, 3 のいずれか)を与えると、それに応じて戻り値(ブロック呼び出しの時はレシーバ)の個数が替わる。
なお、ファイル名のところに “http://www.hoge.com/sample.csv” のようなurlを指定できる。この場合、web上のファイルをダウンロードして処理する。
(17) cut_data()
空欄を含まない行列を切り取るが、数値でない欄も含めて、矩形(2×2以上の正方形または長方形)の行列を切り取る。
このメソッドの詳細については rubyから統計解析ソフトRを使う を参照。
解説ドキュメントで言及していないが、このメソッドには任意の個数の引数を与えることができる。例えば次のとおり。
cut_data("data01.csv", "data02.txt", "data03.csv")
なお、rrx v1.03 から、ファイル名のところに “http://www.hoge.com/sample.csv” のようなurlを指定できるようにした。この場合、web上のファイルをダウンロードして処理する。
(18) select_cells(ary, condition, flag=nil)
- 機能: 該当セルの抽出
- ary: 2次元配列
- condition: 抽出条件。文字列。セルの値は value で表現する。rrx*.rbの中では eval(condition) の真偽を判定する。
- flag: :addr だと該当セルの番地を、そうでなければセルの値を返す。
- 戻り値: [縦の項目名, 横の項目名, 該当セルの値または番地] を複数含む配列を返す。番地は [y,x] の配列の形になる。y>=0, x>=0。
- 利用例: res = select_cells(ary, “value<0.05”, :addr)
select_cells(ary, “value<0.05”) {|unit| puts unit.join(“¥t”)}
- 備考: ブロック付きで呼び出すこともできる。
(19) table_turn(ary)
- 機能: 縦・横を逆転させた配列を返す。
- ary: 2次元配列
- 戻り値: 縦・横を逆転させた2次元配列を返す。
- 利用例: ary2 = table_turn(ary)
(20) del_row(ary, *nums)
- 機能: 2次元配列の指定行を削除
- ary: 2次元配列。あるいは csv | タブ区切りテキストの文字列
- nums: 削除する行の番号。第1行目は 0、第2行目は 1 で指定。-1だと最後の行を意味する。複数列挙できる。
- 戻り値: 削除した結果の2次元配列。あるいは csv | タブ区切りテキストの文字列。引数aryと同じ形式が返される。
- 利用例: ary2 = del_row(ary, 0)
str2 = del_row(str, 1, 3, 5)
目次に戻る
(21) del_col(ary, *nums)
- 機能: 2次元配列の指定列を削除
- ary: 2次元配列。あるいは csv | タブ区切りテキストの文字列
- nums: 削除する列の番号。第1列目は 0、第2列目は 1 で指定。-1だと最後の列を意味する。複数列挙できる。
- 戻り値: 削除した結果の2次元配列。あるいは csv | タブ区切りテキストの文字列。引数aryと同じ形式が返される。
- 利用例: ary2 = del_col(ary, 0)
str2 = del_col(str, 1, 3, 5)
(22) ins_row(ary, n, *arg)
- 機能: 2次元配列に行を挿入
- ary: 2次元配列。あるいは csv | タブ区切りテキストの文字列
- n: 挿入位置の行番号。0 だと第1行の前に挿入。1 だと第1行目と第2行目の間に挿入。-1だと最後の行の前に挿入。nilだと途中への挿入でなく追加になる。
- arg: 挿入する行。必ず1次元の配列で与える。複数列挙することもできる。
- 戻り値: 挿入した結果の2次元配列。あるいは csv | タブ区切りテキストの文字列。引数aryと同じ形式が返される。
- 利用例: ary2 = ins_row(ary, 0, [“foo”, “var”])
str2 = ins_row(str, 1, [“foo”, “var”], [3, 5])
(23) ins_col(ary, n, *arg)
- 機能: 2次元配列に列を挿入
- ary: 2次元配列。あるいは csv | タブ区切りテキストの文字列
- n: 挿入位置の列番号。0 だと第1列の前に挿入。1 だと第1列目と第2列目の間に挿入。-1だと最後の列の前に挿入。nilだと途中への挿入でなく追加になる。
- arg: 挿入する列。必ず1次元の配列で与える。複数列挙することもできる。この1次元配列は縦に展開されるので要注意。
- 戻り値: 挿入した結果の2次元配列。あるいは csv | タブ区切りテキストの文字列。引数aryと同じ形式が返される。
- 利用例: ary2 = ins_col(ary, 0, [“foo”, “var”])
str2 = ins_col(str, 1, [“foo”, “var”], [3, 5])
(24) r_each(argsize), robj_each(argsize)
- 機能: Rプログラムの実行結果(ハッシュ)を1つづつ展開。必ずブロック付きで呼び出す。
- argsize: ブロックのレシーバーの個数。2, 3 のどちらかを指定する。無指定時は 2 とみなされる。
- 戻り値: 不定
- 備考: robj_eachは、Rプログラム内で robj() によって指定したもののみ対象。
- 利用例: r_each() {|key, value| ……}
robj_each(3) {|name, key, value| ……}
(25) xls2ary(target, fmt = :array)
- 機能: Excelファイルの中身を配列またはハッシュに変換
- target: Excelのファイル名を示す文字列。web上のファイルをurlで指定することもできる。”data.xls”, “http://www.hoge.com/test.xls” など。
- fmt: 戻り値の形式をこれで指定する。:array | :hash のいずれか。指定しなければ :array とみなされる。
- 戻り値: fmtが:arrayの場合、2次元配列を複数含む配列を返す。Excelの1つのワークシートが1つの2次元配列に変換される。読み込みに失敗した時は nil を返す。
fmtが:hashだと、keyがワークシート名、valueがワークシートの中身(2次元配列)となる。読み込みに失敗した時は nil を返す。
空のワークシートは読み飛ばす。また、各ワークシートについて、最初の空白行|空白列を取り込まない。つまり、VBAでいうところのUsedRangeに当たるものを返す。
- 備考: このメソッドを利用するためには、rubyのライブラリ spreadsheet | roo | exlap のいずれかがrequireされている必要がある。spreadsheetなら *.xls、rooだと *.xls, *.xlsx, *.xml(Excel2003xml), *.ods(OpenOffice)を読み込める。exlapの場合もrooと同じ。
- 利用例: ary = xls2ary(“data.xls”)
(26) gss2ary(target, opt = nil, fmt = :array)
- 機能: Google Document Spreadsheet(以下 gss)の中身を配列またはハッシュに変換
- target: gssのkeyを示す文字列。gssはweb上にあり、そのurlは「https://docs.google.com/spreadsheet/ccc?key=xxxx」のようなものになるが、このxxxxの部分を指定する。
- opt: gssにアクセスするための、あなたのユーザー名(Google mail address)とパスワードをハッシュで指定する。{:user=>’xxx@gmail.com’, :password=>’xxxx’} など。ハッシュのキーとして :access_token も指定できる。それぞれを環境変数 GOOGLE_MAIL, GOOGLE_PASSWORD, GOOGLE_TOKEN にセットしていれば、このoptで指定しなくてもよい(省略できる)。
- fmt: 戻り値の形式をこれで指定する。:array | :hash のいずれか。指定しなければ :array とみなされる。
- 戻り値: fmtが:arrayの場合、2次元配列を複数含む配列を返す。gssの1つのワークシートが1つの2次元配列に変換される。読み込みに失敗した時は nil を返す。
fmtが:hashだと、keyがワークシート名、valueがワークシートの中身(2次元配列)となる。読み込みに失敗した時は nil を返す。
空のワークシートは読み飛ばす。また、各ワークシートについて、最初の空白行|空白列を取り込まない。つまり、VBAでいうところのUsedRangeに当たるものを返す。
- 利用例: ary = gss2ary(xxxx, {:user=>’xxx@gmail.com’, :password=>’xxxx’})
- 備考: このメソッドを利用するためには、rubyのライブラリ roo がrequireされている必要がある。rooの中で google-spreadsheet が呼び出されているので、予め gem で google-spreadsheet-ruby をインストールしておく必要がある。
(27) get_web(url, res_type = nil, opt = nil)
- 機能: web上のファイルを取得。
- url: web上のファイルの所在を示すurl。”http://www.hoge.com/sample.csv” など。ftpも指定可能。
- res_type: 戻り値のタイプ。:file | :string のどちらかを指定。:fileだと、web上のファイルをローカルファイル(テンポラリファイル)として書き出す。:stringなら文字列として返す。無指定の時は :file とみなされる。
- opt: webアクセスに OpenURI.open_uri() を用いているが、この関数に引き渡すオプションがあればハッシュ形式で指定する。{:proxy=>’http://proxy.example.com:8000/’, :http_basic_authentication=>[usrname,password]} など。詳しくは ruby のレファレンスマニュアルを参照。
- 戻り値: res_typeが :file の場合、web上のファイルをローカルなテンポラリファイルとして書き出し、そのtempfileオブジェクトを返す。バイナリモードで書き出されているので、中身を参照する時は同じくバイナリモードで読み込むのがよい。res_typeが :string の時は、web上のファイルを文字列の形で返す。
- 利用例: tfile=get_web(‘http://……’); filename=tfile.path
str = get_web(‘http://……’, :string)
- 備考: MS-Windows環境においては、httpへのアクセスに OpenURI.open_uri() ではなく Msxml2.XMLHTTP を用いる。proxyなどの情報はインターネットオプションを用いるので指定する必要はない。
(28) http_opt(opt)
- 機能: get_web() に与えるopt(第3引数)を予め設定。
- opt: get_web() の第3引数として与えるオプション、つまり OpenURI.open_uri() のオプション。ハッシュで指定する。
- 戻り値: オプション(ハッシュ)がそのまま返される。
- 利用例: http_opt({:proxy=>’http://proxy.example.com:8000/’})
- 備考: http_opt({……}) とすると、ハッシュが内的に保持されて、get_web() が呼び出された時に第3引数の代わりに用いられる。ただし、rubyスクリプトが終了すると保持が解除される(消えてしまう)。
(29) web2ary(url, regex=nil, count=nil)
- 機能: webページのテーブルを配列に変換
- url: webの所在を示すurl。または、ハードディスクなどにあるhtmlファイルの名前、htmlが記録された文字列でもよい。
- regex: テーブル指定の正規表現。これにマッチするテーブルのみを取得。
- count: テーブルの行数指定。整数値。これ未満の行のテーブルは対象外。
- 戻り値: 2次元配列を複数含む配列を返す。つまり3次元配列。1つのテーブルが1つの2次元配列に変換される。読み込みに失敗した時は nil を返す。
- 利用例: tables = web2ary(“http://……/test.htm”)
tbl = web2ary(“test.htm”, /都道府県別人口/).first
tbl = web2ary(url, nil, 10).first # 10行以上のテーブルのみ
- 備考: このメソッドを利用するためには、rubyのライブラリ nokogiri または hpricot のどちらかがrequireされている必要がある。
テーブルの中のセル内に改行がある場合は、その改行を半角の ‘|’ に変換する。’|’ の前後に半角の空白を置くので、3バイトに変換することになる。
テーブル中にセル結合がある時は、結合セル群の左上端のところにデータを書き入れて、それ以外は空欄にする。
(30) nkfex(str, enc=”utf-8”)
- 機能: 文字列の文字コードをnkfを用いて変更する。
- str: 文字列
- enc: 指定文字コード。無指定の時は “utf-8” とみなされる。”euc-jp”, “Windows-31J”, “jis”, “Shift_JIS”, Encoding::UTF_8 など。
- 戻り値: 指定の文字コードに変換された文字列。
- 利用例: enc = RUBY_VERSION >= “1.9” ? ENCODING : $KCODE
str = nkfex(str, enc) # 現スクリプトと同じ文字コードに変換する
- 備考: 第2引数のencに Encoding::UTF_8 などを指定できるのは ruby ver 1.9 以降。
目次に戻る
(31) to_rba(xx, type)
- 機能: Rで生成されたarray|matrixをrubyで扱いやすい配列に変換
- xx: Rで生成されたarray|matrix。
- type: xxのタイプ。:array | :matrix のどちらかを指定。Rのarray(1次元)なら :array、matrixやdata frameなら :matrix。これ以外(例えば :none など)だと変換せずにxxをそのまま返す。
- 戻り値: 2次元配列。
- 利用例: ary = to_rba(xx)
- 備考: Rにおける1次元のarrayは、rubyで受け取った時に少々ややこしい形になっているので、素直な2次元配列に変換する。また、array, matrixのどちらであっても、最左列が通し番号の時はその列を削除する。
(32) clp2str()
- 機能: クリップボードのデータを文字列で返す
- 戻り値: 文字列。文字コードは rencode() で調整されたものとなる。つまり、実行中のrubyスクリプトと同じ文字コードになる。改行は ¥r¥n が ¥n に変換される。
- 利用例: str = clp2str()
- 備考: クリップボードを読み取ったばかりのデータは、ファイルでいえばバイナリモードで読み取った時に類似している。改行は、通常 ¥r¥n になっている。それを¥nにして返す。また、ruby v1.9系では文字コードがASCII-8BITになっているので、それを変更した上で返す。
(33) str2clp(str)
- 機能: クリップボードに文字列を出力する
- str: 文字列
- 戻り値: 不定
- 利用例: str2clp(“abc”)
- 備考: 文字コードと改行コードは、特に変換せずそのまま出力する。
(34) array2table(aa, *arg)
- 機能: Rで生成された1次元のarrayを縦線形式のmarkdownの表に変換
- aa: Rから受け取った1次元のarray(rubyの配列になったもの)
- arg: 必要に応じて次の3つを指定可能(複数指定可)。1) markdownのtableの見出しと本体の区切り、2) tableの属性(htmlのborderなど)の指定、3) tfootを設けるための指定。
- 戻り値: 文字列。縦線形式のmarkdown形式に変換されたtableを返す。
- 利用例: str = array2table(xx)
str = array2table(xx, [”–:”]*4) # 4列とも右寄せにする場合
str = array2table(xx, ‘border=”1”’) # htmlで罫線を付加
- 備考: Rのarrayは、1次元であっても各々の列(行というべきかも?)にそれぞれ名前が付いている場合がある。その時はrubyに変換すると2次元配列になる。その他、当メソッドの詳細は rrx_util.txt を参照。
(35) matrix2table(aa, *arg)
- 機能: Rで生成された2次元のarray/matrixを縦線形式のmarkdownの表に変換
- aa: Rから受け取った2次元のarray(rubyの配列になったもの)
- arg: 必要に応じて次の3つを指定可能(複数指定可)。1) markdownのtableの見出しと本体の区切り、2) tableの属性(htmlのborderなど)の指定、3) tfootを設けるための指定。
- 戻り値: 文字列。縦線形式のmarkdown形式に変換されたtableを返す。
- 利用例: str = matrix2table(xx)
str = matrix2table(xx, [”–:”]*4) # 4列とも右寄せにする場合
str = matrix2table(xx, ‘border=”1”’) # htmlで罫線を付加
- 備考: 詳細は rrx_util.txt を参照。
(36) html_string(param)
- 機能: htmlの「<head>……</head>」の部分に挿入するための文字列を返す
- param: シンボルの :table または :mathjax のどちらか1つを指定
- 戻り値: head部分に挿入する文字列。:tableを指定した時は、表の各セルを罫線で囲むための記述が返される。:mathjaxだと、この方式での数式表示に必要な記述が返される(InternetExplore対応記述を含む)。
- 利用例: str = html_string(:table)
str = html_string(:mathjax)
(37) html_template(enc=nil, *arg)
- 機能: kramdown用のhtmlテンプレートを生成
- enc: htmlのcharsetを指定。nilだとkramdownが適当に判断する。指定する時は、”utf-8”, “euc-jp”, “Shift_JIS” などの文字列か、:”euc-jp” のようなシンボルを用いる。
- arg: 第2引数以降(複数指定可)として、文字列が指定されると、それがhtmlの </head> の直前に挿入される。その他、シンボルの:tableが指定されると、すべてのtableに罫線を引くためのcss記述が挿入され、:mathjaxが指定されるとmathjax用のmeta記述が挿入される。
- 戻り値: tempfileのオブジェクト。htmlテンプレートがテンポラリファイルとして書き出され、そのtempfileオブジェクトが返される。この戻り値がtffに代入されている場合、tff.pathでそのフルパス名が得られる。
- 利用例: tff = html_template(‘utf-8’)
tff = html_template(nil, :table, :mathjax)
(38) tex_template(dclass=nil)
- 機能: kramdown用のtexのテンプレートを生成
- dclass: texのドキュメントクラスを指定。指定しないか、またはnilを指定すると、’¥documentclass{jarticle}’ が指定されたものとみなされる。
- 戻り値: tempfileのオブジェクト。texのテンプレートがテンポラリファイルとして書き出され、そのtempfileオブジェクトが返される。この戻り値がtffに代入されている場合、tff.pathでそのフルパス名が得られる。
- 利用例: tff = tex_template()
tff = tex_template(‘¥documentclass[a4paper,12pt]{jarticle}’)
tff = tex_template(«‘EOS’)
¥documentclass{jsarticle}
¥renewcommand{¥presectionname}{第}
¥renewcommand{¥postsectionname}{章}
EOS
- 備考: 引数のdclassには、ドキュメントクラスだけでなく、それに続く文字列を加えてもよい。
- 機能: rubyの配列をアスキー文字の罫線付きで表に整形する。rubyライブラリの terminal-table を利用。
- ary: 表の素材となるrubyの配列
- header: これがnil以外の値だと、aryの1行目をヘッダとみなして、2行目との間にアスキー文字の罫線を挿入する。nilであれば挿入しない。’=’ を与えると ‘=’ が罫線文字になる。
- sep: これがnil以外の値だと、各々の行と行の間に横の罫線(セパレータ)を挿入する。nilであれば挿入しない。ただし、縦の罫線は常に挿入される。
- 戻り値: 文字列。表が何行かに渡って記録されている。
- 利用例: str = text_table(ary)
str = text_table(ary, 1)
str = text_table(ary, ‘=’, 1)
- 備考: マルチバイト文字がutf-8で書かれていると、1文字が3バイトになるため、表を画面表示した時にズレが生ずるかもしれない。それが気になる時は euc-jp や Shift_JIS で試されたい。
アスキー文字罫線の表は、pandocというコマンドにおいて「グリッドテーブル」として処理される。この場合、1つのセルの中に箇条書きやコードブロックなどを盛り込むことができる。この text_table() は、pandocとの組合せを意識して設けた。サンプル a_tbl.rb を参照のこと。
(40) time2str(x)
- 機能: rubyのTimeオブジェクトを文字列に変換する
- x: rubyのTimeオブジェクトまたは配列。配列の場合は各要素をチェックして、Timeオブジェクトであれば文字列に変換し、それ以外なら変換しない。xは、2次元配列や3次元配列でもかまわない。
- 戻り値: 文字列または配列。引数xが配列であれば配列を返す。
- 利用例: str2 = time2str(str)
ary2 = time2str(ary)
- 備考: Timeオブジェクトを単純に文字列に変換すると、「2014-04-23 00:00:00 +0900」のような形式になるが、time2str() は、世界標準時との差を示す「+0900」を削除し、更に、「00:00:00」といった省略可能な時刻の表示も削除する。時刻が「18:57:00」のような場合は、末尾の「:00」を取り除いて「18:57」にする。
目次に戻る
(41) to_enc(str)
- 機能: strの文字コードを当スクリプト(rrx*.rb)のものと同じになるよう変換する。rrxutf.rbがrequireされていれば utf-8 に変換する。
- str: 文字列
- 戻り値: 文字列
- 利用例: str2 = to_enc(str)
(42) to_rex(x)
- 機能: rubyのString, ArrayをRのcharacter, vector, matrixの記述形式に変換する。rubyのArrayが1次元配列ならvector、2次元配列ならmatrixに変換。3次元以上の配列には対応しない。
- x: rubyの String または Array
- 戻り値: 文字列。Rプログラムの一部として組み入れることのできる記述形式になっている。
- 利用例: str = to_rex(x)
- 備考: 引数xが 「’C:¥usr¥test.txt’」の場合、「”C:¥¥usr¥¥test.txt”」が返される。両側にダブルクォーテーションが付いている。
引数xが1次元配列「[‘pi’, 3.14]」であれば、「c(“pi”, 3.14)」になる。
2次元配列「[[‘リンゴ’, ‘apple’], [‘みかん’, ‘orange’]]」の時は、「matrix(c(“リンゴ”, ……), ncol=2, byrow=T)」に変換される。rubyの配列において行の列数が不揃いの時は、最多の列数に合わせる(空文字列 “” を補う)。
(43) xls2tmp(target, sn, ftype)
- 機能: Excelファイルの1つのワークシートをcsvまたはタブ区切りの形式でテンポラリファイルに書き出す。
- target: Excelのファイル名、または、ExcelファイルのURL。
- sn: ワークシートの番号。2を指定すると第2ワークシート。無指定の時は 1が指定されたものとみなされる。
- ftype: 書き出す時の形式。”.csv” だとcsv、”.txt” であればタブ区切りテキストになる。無指定の時は “.csv” とみなされる。
- 戻り値: テンポラリファイルを指すオブジェクト。rubyの標準添付ライブラリ tempfile のオブジェクトを返す。うまくいかなかった時は nil を返す。
- 利用例: tfile = xls2tmp(“data.xls”)
tfile = xls2tmp(“http://www.hoge.com/data.xls”, 3, “.txt”)
- 備考: 戻り値 tfile は、tfile.path でそのフルパス名を取得できる。tfile.unlink とすれば、そのテンポラリファイルを削除できる。
Excelのワークシートを書き出す際、最初の方の行について、1列だけの行と空白行は消去する。同じように、最後の方の行についても、2列以上ない行は消去する。2行×2列より小さい表は書き出さない。
xls2tmp() を利用する時は、Excelファイルを扱うためのrubyのライブラリ spreadsheet | roo | exlap のどれかを予めrequireしていなければならない。
(44) htm2tmp(target, reg, sn, ftype)
- 機能: htmlファイルの1つのテーブルをcsvまたはタブ区切りの形式でテンポラリファイルに書き出す。
- target: htmlのファイル名、または、htmlのURL。
- reg: テーブルに含まれる文字列を正規表現で指定したもの。無指定またはnilだと、正規表現によるマッチングは行わない。
- sn: テーブルの番号。2を指定すると第2のテーブル。無指定の時は 1が指定されたものとみなされる。
- ftype: 書き出す時の形式。”.csv” だとcsv、”.txt” であればタブ区切りテキストになる。無指定の時は “.csv” とみなされる。
- 戻り値: テンポラリファイルを指すオブジェクト。rubyの標準添付ライブラリ tempfile のオブジェクトを返す。うまくいかなかった時は nil を返す。
- 利用例: tfile = htm2tmp(“data.htm”)
tfile = htm2tmp(“http://www.hoge.com/data.htm”, /職業別の年齢分布/)
tfile = htm2tmp(“http://www.hoge.com/data.htm”, nil, 3, “.txt”)
- 備考: 戻り値 tfile は、tfile.path でそのフルパス名を取得できる。tfile.unlink とすれば、そのテンポラリファイルを削除できる。
htmlのテーブルを書き出す際、最初の方の行について、1列だけの行と空白行は消去する。同じように、最後の方の行についても、2列以上ない行は消去する。2行×2列より小さい表は書き出さない。
(45) web2file(url)
- 機能: Web上のファイルをローカルファイルとして書き出す。
- url: Web上のファイルを指し示すURL。
- 戻り値: ローカルファイルの名前。書き出せなかった時は nil を返す。
- 利用例: filename = web2file(“http://www.hoge.com/data.xls”)
- 備考: ローカルファイルの名前は、極力 url が指すものと同じになるよう図る。ローカルファイルとして使えない文字は、半角の ‘_‘(下線)に変換してファイル名とする。
Web上のファイルをローカルファイルとして書き出す際は、常にバイナリーモードで書き出す。
(46) kramdown_html(str, *opt)
- 機能: markdownの原稿(文字列)をkramdownによってhtmlに変換。
- str: markdownの原稿が代入された文字列。
- opt: kramdownに引き渡すオプション。その他、当メソッド独自のオプションとして次のものがある。
:s または :standaloneを指定すると、スタンドアロンのhtmlを返す。当メソッド独自のテンプレートが用いられる。
:mathjaxを指定すると、mathjax対応のheader情報が挿入される。上述の :s が指定されてないと無効。
:tableを指定すると、テーブルに罫線を付けるためのcss情報がheaderに挿入される。上述の :s が指定されてないと無効。
- 戻り値: htmlに変換した結果(文字列)。
- 利用例: html_str = kramdown_html(mkd_str)
html_str = kramdown(mkd_str, :s, :table)
- 備考: 文字コードは、引数strと同じものになる。
(47) kramdown_tex(str, *opt)
- 機能: markdownの原稿(文字列)をkramdownによってtexに変換。
- str: markdownの原稿が代入された文字列。
- opt: kramdownに引き渡すオプション。
その他、:s または :standaloneを指定すると、スタンドアロンのtexを返す。当メソッド独自のテンプレートが用いられる。
先の :s が指定されている場合、オプションとしてHashでなく文字列を指定すると、その文字列がtexのドキュメントクラスとして用いられる。
:s が指定されている場合であって、ドキュメントクラスの指定がない時は、’¥documentclass{jarticle}’ が指定されたものとみなされる。
- 戻り値: texに変換した結果(文字列)。
- 利用例: tex_str = kramdown_tex(mkd_str)
tex_str = kramdown(mkd_str, :s, ‘¥documentclass{jsarticle}’)
- 備考: 文字コードは、引数strと同じものになる。
(48) kramdown_contents(str)
- 機能: kramdownの目次(toc)の文字列を生成する。
- str: この引数が文字列として与えられると、toc生成にそれが盛り込まれる。
- 戻り値: toc用の文字列。引数strが nil または “” の時は、”* contents list¥n{:toc}¥n” を返し、そうでなければ、”#{str}¥n{:#contents}¥n¥n* contents list¥n{:toc}¥n” を返す。
前者(strがnilの場合)は、主にtex用として使う。markdownの原稿中でこれを書いておくと、texに変換した時に「¥tableofcontents」に変換される。
後者の場合は主にhtml用として用いる。例えばstrが “# 《目次》” の場合、htmlに変換した時に「<h1 id=”contents”>《目次》</h1>」となる。そのため markdownの原稿中で「[目次に戻る](#contents)」と書くと、それがhtmlに変換した時に「<a href=”#contents”>目次に戻る</a>」となる。
- 利用例: str = kramdown_contents(“# 《目次》”)
str = kramdown_contents(nil)
(49) pandoc_convert(str, *opt_ary)
- 機能: markdownの原稿(文字列)などをpandocによってhtmlなどに変換。
- str: markdownの原稿などが代入された文字列。後述のオプションで :from の指定がない時は markdownとみなされる。
- opt_ary: pandocに引き渡すオプション群。pandoc-rubyにそのまま引き渡す。
「:from=>:markdown, :to=>:html」が前提とされるが、もちろん :from, :to の指定があれば、それが有効になる。
- 戻り値: 変換した結果(文字列)。文字コードは utf-8 になっている。
- 利用例: html_str = pandoc_convert(mkd_str)
tex_str = pandoc_convert(mkd_str, :to=>:latex)
- 備考: 引数strの文字コードが何であれ、pandocで変換する前にutf-8に変換される。戻り値もutf-8になっている。
(50) pandoc_html(str, *opt_ary)
- 機能: markdownの原稿(文字列)をpandocによってhtmlに変換。
- str: markdownの原稿が代入された文字列。
- opt_ary: pandocに引き渡すオプション群。pandoc-rubyにそのまま引き渡す。スタンドアロンのhtmlを生成する時は :s を指定すること。
- 戻り値: htmlに変換した結果(文字列)。文字コードは utf-8
- 利用例: html_str = pandoc_html(mkd_str)
html_str = pandoc_html(mkd_str, :s)
- 備考: 内部で pandoc_convert() を呼び出している。
目次に戻る
(51) pandoc_tex(str, *opt_ary)
- 機能: markdownの原稿(文字列)をpandocによってtexに変換。
- str: markdownの原稿が代入された文字列。
- opt_ary: pandocに引き渡すオプション群。pandoc-rubyにそのまま引き渡す。スタンドアロンのtexを生成する時は :s を指定すること。
- 戻り値: texに変換した結果(文字列)。文字コードは utf-8
- 利用例: tex_str = pandoc_tex(mkd_str)
tex_str = pandoc_tex(mkd_str, :s)
- 備考: 内部で pandoc_convert() を呼び出している。
(52) pandoc_docx(str, *opt_ary)
- 機能: markdownの原稿(文字列)をpandocによってdocx(MS-Word文書)に変換。
- str: markdownの原稿が代入された文字列。
- opt_ary: pandocに引き渡すオプション群。pandoc-rubyにそのまま引き渡す。
- 戻り値: docxに変換した結果(文字列)。これをバイナリーモードでファイル出力すれば、ワード文書になる。
- 利用例: docx_str = pandoc_docx(mkd_str)
- 備考: 内部で pandoc_convert() を呼び出している。
(53) erb_three(str)
- 機能: xxxなどの3文字重ねパターンをERB用に変換
- str: 3文字重ねパターンを含む文字列
- 戻り値: ERB用に変換した文字列
- 利用例: str2 = erb_three(str); str3 = ERB.new(str2).result(binding)
- 備考: markdownの原稿などに xxx とか yyy などの3文字重ねパターンがあるとき、それを次のように変換する。
<%= (!defined?(xxx) || xxx == nil) ? “xxx” : xxx %%>
つまり、もし変数 xxx に 123 という値が代入されていれば、xxxが123に置換される。xxxがそもそも用いられていないか、または、値がnilならば “xxx” という文字列に置換される(実質的に置換は行われないのと同じ)。
3文字重ねパターンとして認識されるのは、xxx, yyy1, zzz_file, xxx[0] などである。正規表現パターンで示すと次のとおり。
/([a-z])¥1¥1(¥d+|_[A-Za-z0-9]+|¥[.+?¥])*/
なお、引数として与えられた文字列の中の「<% …… %%>」の中に3文字重ねパターンがあっても、それは置換されない。
目次に戻る
2. module Rclip
MS-Windowsの環境において、クリップボードを扱うためのメソッド。
(1) clear()
- 機能: クリップボードの中身を全消去
- 戻り値: 不定
- 利用例: clear()
(2) getData(cf)
- 機能: クリップボードの中身を得る
- cf: シンボルまたは数値。データの形式を指定。cfとしてどのような値を指定できるかは、rrx*.rbの中の定数 CF を参照。:CF_BITMAP など様々な形式がある。CFで定義されていないものは数値で指定する。
テキストとして得たい時は :CF_TEXT または 1 を指定する。省略すると、この :CF_TEXT が指定されたものとみなされる。
- 戻り値: クリップボードの中身が文字列で返される。
- 利用例: str = getData()
data = getData(:CF_BITMAP)
- 備考: クリップボードの中身をテキストとして得た場合、通常、改行は ¥r¥n(CRLF)になっている。ruby v1.9系では文字コードがASCII-8BITになっているので要注意。
(3) setData(data, cf, gm)
- 機能: クリップボードにデータを出力する
- data: クリップボードに出力するデータ
- cf: getData()の引数と同じ。省略すると :CF_TEXT とみなされる。
- gm: メモリの確保や初期化に関するフラグ。通常はデフォルトのままでいい。
- 戻り値: 不定
- 利用例: setData(“abc”)
setData(data, :CF_BITMAP)
- 備考: クリップボードに出力する前に、クリップボードの中身を全消去する。
- 機能: クリップボードにあるデータの形式を得る
- 戻り値: データの形式(:CF_TEXTなど)から構成される配列。複数であることが多い。取得に失敗した時は空配列 [] を返す。
- 利用例: ary = format()
- 備考: 例えば Excelのワークシートをクリップボードに貼り付けた場合、そのデータの形式は :CF_TEXT であるとともに :”Rich Text Format” でもある、というように複数であることが多い。getData() でデータを取得するとき、どの形式で取得するかを選択することになるが、どんな選択肢があるかをこの format() で確認できる。
〜 以上 〜
Copyright (C) T. Yoshiizumi, 2013 All rights reserved.
rrxのトップページへ
トップページへ