2010年10月23日土曜日

VimでYankの情報をクリップボードと連携

VimでYankした情報をWindowsの他のアプリに貼りつけたり、他のアプリでクリップボードにコピーした情報をYankする方法。

下記のコマンドを$HOME/_gvimrc(.gvimrc)や$HOME/_vimrc(.vimrc)に記述しておく。

set clipboard=unnamed

こうすることで、Yankした情報を他のアプリで普通に貼り付け(Ctrl + c)できるし、他のアプリでコピーした情報をVimでペースト(pやP)できる。

2010年10月14日木曜日

【ruby】配列の操作

配列(array)の基本的な操作方法

要素の追加

# 末尾に"1"を追加
array.push "1"

# 末尾に"2"を追加
array >> "2"

# 任意の位置に値の挿入
array = ["2", "3"]
array.insert 1, "2"  # 2番目(0から始まるから)の要素("3")の直前に2を挿入
puts array           # ["1", "2", "3"]

array = ["1", "3"]
array.insert -1, "2" # 末尾から2番目の要素("1")の後ろに2を挿入
puts array           # ["1", "2", "3"]

# 先頭に要素を挿入
array = [1, 2, 3]
array.unshift(0)      # [0, 1, 2, 3]
array.unshift([1, 0]) # [[1, 0], 0, 1, 2, 3]
array.unshift(-1, -2) # [-1, -2, [1, 0], 0, 1, 2, 3]

要素の削除

array = [1, 2, 3, 4, 5]
array.delete(3)  # 指定された値と一致する要素が削除され、削除された値が返却される。削除後の要素は、[1, 2, 4, 5]となる。
array.delete(0)  #  削除対象が存在しないため、戻り値はnilとなる。

# 下記のようにblockを指定すると、削除対象がない場合はblockの結果が戻り値となる。
array.delete(0) {
  "'0' is not found."
}

array.delete_at(0)  # 0番目の要素を削除する。
array.delete_at(-1) # 末尾の要素を削除する。

キューやスタックみたいにあつかう

# キュー
array = []
array.push "1"  # [1]
array.push "2"  # [1, 2]
array.shift     # return 1, array = [2]
array.push "3"  # array = [2, 3]
array.shift     # return 2, array = [3]

# スタック
array = []
array.push "1"  # [1]
array.push "2"  # [1, 2]
array.pop       # return 2, array = [1]
array.push "3"  # array = [1, 3]
array.pop       # return 3, array = [1]

要素の全削除

array.clear

要素の存在チェック

array = ["1", "2", "3"]
array.include?("2") # true
array.include?("0") # false

各要素を結合

array = ["1", "2", "3"]
array = [1, 2, 3]
puts array.join       # 123
puts array.join(',')  # 1,2,3

2010年10月9日土曜日

【ruby】配列の生成と要素の参照

rubyでの配列の生成とアクセス方法

rubyの配列は、ミューブルなので生成後でも変更が可能で、さまざまなオブジェクトを代入できる。
Javaでいうところの可変配列(java.util.List)と同じような感じ。

# 配列の生成

array = [0, [0, 1], "aaa", 0..10, 0...10]
Array.new # []
Array.new(3) # [nil, nul, nul]
Array.new(3, 0) # [0, 0, 0]
Array.new(3, "a") # ["a", "a", "a"]
Array.new(3) { |i| i + i } # [0, 2, 4](中括弧の中身の計算結果が代入される。)


# 配列要素へのアクセス
array = [0, [0, 1], "aaa", 0..10, 0...10]
puts array[0] # 0
puts array[2] # "aaa"
puts array[100] # 要素が存在しないからnil

# マイナスを指定すると末尾からのアクセスになる。
# -1=末尾の要素、-2=末尾から2番目の要素
puts array[-1] # 0...10
puts array[-2] # 0..10

sqlplusでBLOBデータの参照

BLOBデータ型は、通常のsql実行では参照することができません。なのでわざわざ、BLOBの項目をselect句の取得項目から削除したりしてます。

どうしてもお手軽にsqlplusからblobのデータを参照したいことがあると思います。
そんなときは、デフォルトで提供されているパッケージを使うとそれなりに表示することができます。

テーブル定義

15:56:46 SQL> desc blob_test
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL CHAR(2)
 BLOB_DATA                                          BLOB

BLOBカラムを含めてselectを実行

SQL> select * from blob_test;
SP2-0678: Column or attribute type can not be displayed by SQL*Plus

blob型カラムがあるのでエラーになります。
日本語メッセージだとこんな感じになります。
SP2-0678: 列または属性型はSQL*Plusでは表示できません。

最近知ったけど、Oracle11gのsqlplusだとこの問題が解決されてる。
こんな感じに16進数でダンプされるんだよね。やるなOracle。
16:20:37 SQL> select * from blob_test;

ID
--
BLOB_DATA
----------------------------------------------------------------------------------------------------
01
333435

02
44462D312E340D25E2E3CFD30D0A32303037352030206F626A0D3C3C2F4C696E656172697A656420312F4C20313030393131
35342F4F2032303037382F4520313439353439322F4E20313330302F5420

また、sqlplusコマンドのlobofを使うとダンプ開始位置を任意に変えられるようになってます。
マニュアルは、こちら。Oracleマニュアル
set lobof 100

sqlplusでBLOBを参照する方法

Oracle10gのクライアントの場合は、下記の方法でBLOBデータを参照する必要がある。

DBMS_LOBパッケージ

dbms_lobパッケージのsubstr関数を使うことによって、16進数でダンプできます。
ただし、上限は2000バイト(raw型の上限にひっかかるのかな?)なので、でかいサイズだと分割しないといけなかったりします。

この例だと、一括で前バイト数をだんぷしていますが、
dbms_lob.substr(カラム名, 読み込むバイト数, 読み込み開始バイト位置)
としてあげると任意のバイトデータをダンプできます。

16:30:25 SQL> r
  1* select dbms_lob.substr(blob_data, dbms_lob.getlength(blob_data)) from blob_test where id = '01'

DBMS_LOB.SUBSTR(BLOB_DATA,DBMS_LOB.GETLENGTH(BLOB_DATA))
----------------------------------------------------------------------------------------------------
3132333435

utl_rawパッケージ

utl_rawパッケージを使うと、文字列などに変換して出力できます。
dbms_lobと同じように上限は2000バイトみたいです。

0x3132333435をダンプしてるので、12345となります。
16:35:41 SQL> select utl_raw.cast_to_varchar2(blob_data) from blob_test where id = '01';

UTL_RAW.CAST_TO_VARCHAR2(BLOB_DATA)
----------------------------------------------------------------------------------------------------
12345

2010年10月6日水曜日

IME切り替えキーの変更(Windows7)

IME切り替えキーの変更で書いた内容のWindows7版

  • 言語バーの設定画面を開く
  • Microsoft IMEのプロパティボタンをクリックしてIMEのプロパティ画面へ
  • 編集操作タブへ移動
  • キー設定の変更ボタンをクリックして、IME詳細プロパティ画面を開く
  • IME切り替えを割り当てたいキーの「入力/変換済み文字なし」欄をダブルクリック
  • 機能選択画面で「IME-オン/オフ」を選んでOKをおす