Learn Ruby

Thursday, July 06, 2006

 

quick and dirty codes for my bio info program

class Gene
def initialize(seq, info)
@seq = seq
@info = info
@ei_marks = [0] + srch_ei_recursively(0)
end

def ex_N
@ei_marks.size/2 + 1
end

def in_N
@ei_makrs.size/2
end

def exon(index)
if (index*2) < @ei_marks.size - 1
@seq[@ei_marks[index*2]...@ei_marks[index*2 + 1]]
else
@seq[@ei_marks[index*2]...@seq.size]
end
end

def intron(index)
@seq[(@ei_marks[index*2 + 1])...(@ei_marks[index*2 + 2])]
end
def test
@ei_marks
end
private
def srch_ei_recursively(beg)
beg_value = @seq[beg].to_i
inter_value = 96.5 # the value of 'Z' is 96
for i in beg...@seq.size
if (((beg_value - inter_value)*(@seq[i].to_i - inter_value)) < 0)
return [i] + srch_ei_recursively(i)
end
end
return []
end
# end of private methods

end

Wednesday, July 05, 2006

 

String#delete

这个method接受的参数多于一个时,只要有一个参数不存在于目标string里,任何动作就都不会执行。看例子比较容易明白。
irb(main):001:0> a = "he l lo  !"
=> "he l lo !"
irb(main):002:0> a.delete!(" ", "a")
=> nil
irb(main):003:0> a
=> "he l lo !"
irb(main):004:0> a.delete!(" ")
=> "hello!"
irb(main):005:0>

所以执行String#delete要么逐个删除,要么用String#include?检查一下。

另外'\n'与"\n"的区别在这里也有体现:
irb(main):001:0> "he ll o\n".delete('\n')
=> "he ll o\n"
irb(main):002:0> "he ll o\n".delete("\n")
=> "he ll o"
irb(main):003:0> printf('\n')
\n=> nil
irb(main):004:0> printf("\n")

=> nil
irb(main):005:0>

 

Integer#chr

若是使用getc, readchar读取IO的字符,结果会是一个0~255的整数。若想将其转换成字符,可以用chr method.比如
irb(main):001:0> 98.chr
=> "b"
reference

Tuesday, July 04, 2006

 

如何控制output的格式

最简单的是用 printf,格式使用起来跟C的语法一样
如下面的语句
testfile = File.new("testfile", "w")
a = 5
for i in 1..10 do
testfile.printf("%0#{a}d \n", i)
end

那么得到的结果就是
$cat testfile
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010

注意设置宽度是用#{a}把变量a的值传递到字符串内

Archives

July 2006   April 2007  

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]