2007-06-01から1ヶ月間の記事一覧

リンクリストの探索

ポインタの無いrubyでどうやってリストを実現するのか?とgoogleに聞いてみたところ,ルート探索(2) - バリケンのRuby日記 - Rubyistを教えてくれた.ハッシュか配列に一意なキーを入れてそれで検索すればいいのか. #!ruby -Ks route_map = { :A => [:B, :D…

構造体を保存する

fname = 'words.dat' base = "BCDFGHJKLMNPQRSTVWXYZ" (1..rand(5)+10).inject(words=[]) {|w,i| w << (0..rand(10)+5).inject(str="") {|x,i| x << base[rand(base.size)] } } p words #=> "BJXNRN", "KTVRCZFZXJKCQZ", "NLDLHTMHF", "LGZRCSFGGTT", "KHNRN…

二重ループ(2)

callccを使いこなせないとダメらしいので,二重ループ - ロバの耳にcallccを突っ込んでみる.これでbreakしても二重ループから脱出しない.逆にreturnでも二重ループから脱出出来ない訳だが….でもそれもcallccで解決. def twin_loop(a,b) c = nil begin a.…

デストラクタ

class TestDestructor @@refcount = 0 @@filelist = [] # TestDestructorが開いているファイルのリスト def initialize _set_finalizer(nil) @@refcount+=1 end def _set_finalizer( data) ObjectSpace.undefine_finalizer(self) ObjectSpace.define_finaliz…

xmlファイルを読む

test.xml: <test> <head version="1.2.0" size="512"> </head> <foo index="0"> foobar0 </foo> <foo index="1" h="1"> foobar1 </foo> </test> require 'rexml/document' file = File.new( "test.xml" ) doc = REXML::Document.new file p doc.elements["test/head"].attributes["version"] #=> "1.2.0" p doc.elements["t…

xlsファイルを読む

暫定版 require 'win32ole' class OpenCalc def initialize @document = nil begin @manager = WIN32OLE.new("com.sun.star.ServiceManager") @desktop = @manager.createInstance("com.sun.star.frame.Desktop") rescue puts "OpenOfficeがインストールされ…

リアルハカーな人々のruby日記を見てると.ほとんど毎日のように知らないテクが出てくる.一体どれだけ俺の知らない機能があるというのか.

gresreg

#!ruby -Ks require "optparse" # エラーメッセージを表示して終了する def disp_error_exit( str) $stderr.puts str exit(2) end # fnameを上書きする def save_file( fname, strs) tmpname = fname + '.tmp' bakname = fname + '.bak' open( tmpname, 'w')…

二重ループ

def twin_loop(a,b) a.each {|x| b.each {|y| yield(x,y) }} end と書いてみたが, twin_loop(ARGF, rexs) {|l,x| if x =~ l puts "#{ARGF.filename} #{ARGF.file.lineno}:#{l}" flag_found = true break end } は ARGF.each {|l| rexs.each {|x| if x =~ l …

クリップボードを操作する

require "win32/clipboard" include Win32 str = Clipboard.data # クリップボードからデータを取得 str.upcase! Clipboard.set_data( str) # クリップボードに転送 p str # クリップボードのデータを消去 Clipboard.empty win32/clipboardはhttp://rubyforg…

おもいついた

a = str.scan(/.{1,4}/) # タブ幅4 a = a.map {|x| x.sub(/ +\z/,"\t") } puts a.join('') 相変わらず元の文字列にタブが混じっていると意図通りに動作しない.あと日本語が混じっててもダメそうな気が.タブを空白に,空白をタブに変える - ロバの耳にコピ…

手続き的

相変わらず,perl cookbookの内容をrubyで書き直す練習をしているんだけれど,手続き的な記述しか出来ないとかなり負けた気分になる. たとえばこんなコード: tab_size = 4 str = "test test test" a = str.split(/( +)/) p = 0 a = a.map {|x| if x !~ /( …