dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

rubyでの2進数の扱い

2011-01-24 23:01:31 | ruby
rubyでの2進数の扱いに関しての備忘録。

■プログラム内での2進数での数値表記
irb(main):002:0> a = 0b11
=> 3

■bitシフト
irb(main):004:0> (0b1 << 2)
=> 4

■2進数表記の文字列への変換
irb(main):006:0> 0b110.to_s(2)
=> "110"

■2進数表記の文字列の数値への変換
irb(main):007:0> "110".to_i(2)
=> 6

rubygemsの使い方

2011-01-22 22:02:49 | ruby
rubygemsの使い方の備忘録です。

■インストールされているgemを一覧表示
gem list

■gem をダウンロードしてカレントディレクトリに置く
gem fetch

■ダウンロード済みのgemをインストール
gem install xxx.gem -l

■gemをアンインストール
gem uninstall xxx.gem


rubyでexcelファイルの読み込み

2011-01-19 00:31:39 | ruby
ruby で excel のデータを処理するときには、.xls ファイルをタブ区切りテキストファイルに保存していましたが、Spreadsheet を使えばファイルを変換しなくてもデータを取得することができました。

■Spreadsheetのサンプルプログラム
#!/usr/local/bin/ruby

$KCODE = 'u'
require 'jcode'
require 'rubygems'
require 'spreadsheet'

book = Spreadsheet.open('test1.xls')
sheet = book.worksheet(0)

0.upto(sheet.row_count - 1) do |i|
item1 = sheet[i, 0]
item2 = sheet[i, 1]
print("[#{item1.to_s}]\t[#{item2.to_s}]\n")
end

■データファイル(test1.xls)
サイト名 URL
Google http://www.google.co.jp/
Yahoo http://www.yahoo.co.jp/
MSN http://jp.msn.com/

■実行結果
[サイト名] [URL]
[Google] [http://www.google.co.jp/]
[Yahoo] [http://www.yahoo.co.jp/]
[MSN] [http://jp.msn.com/]

前方一致する文字列を判定する正規表現

2010-12-21 01:17:45 | ruby
いくつかの文字列の中から、特定の文字列に前方一致するものを判定する方法です。
ちょっと強引ですが、正規表現でも実現できます。

【プログラム】

def make_prefix_match_regexp(str)
restr = '^'

cs = str.split('')
cs.each do |c|
restr << '(?:|' + Regexp.quote(c)
end

restr << ')' * cs.length + '$'

return restr
end


restr = make_prefix_match_regexp('http://test.jp/index.html')
re = Regexp.new(restr)
print("[#{restr}]\n")

['http://test.jp/',
'http://test.com/',
'http://test.jp/index.html',
'http://test.jp/index.html?p=1'].each do |str|
res = str =~ re
print("#{str}: [#{res.to_s}]\n")
end


【実行結果】
[^(?:|h(?:|t(?:|t(?:|p(?:|:(?:|/(?:|/(?:|t(?:|e(?:|s(?:|t(?:|\.(?:|j(?:|p(?:|/(?:|i(?:|n(?:|d(?:|e(?:|x(?:|\.(?:|h(?:|t(?:|m(?:|l)))))))))))))))))))))))))$]
http://test.jp/: [0]
http://test.com/: []
http://test.jp/index.html: [0]
http://test.jp/index.html?p=1: []




EUC文字列のチェック

2007-03-31 13:31:42 | ruby
テキストをDBに登録する際に、EUCとUTF-8のテキストを混在させてしまいました。 EUCではない文字列を判定するのにrubyで以下のようにチェックしました。

str =~ /^(?:[x20-x7E]|[xA1-xFE][xA1-xFE])*$/ ? true : false


1バイト目 2バイト目 3バイト目
ASCII 0x20-0x7E
漢字 0xA1-0xFE 0xA1-0xFE
半角カナ 0x8E 0xA1-0xDF
補助漢字 0x8F 0xA1-0xFE 0xA1-0xFE