Ruby分割文件

自己小试的ruby程序,用于将一个dictionary.txt分割成多个小一点的子文件,不然每次都操作dictionary.txt显得很笨重。想把dictionary.txt按照字母首a~z,每个首字母再按长度分为长度为1~3的比如a_1to3.txt,长度为4的a_4.txt,长度为5的a_5.txt,长度为6的a_6.txt,长度为7的a_7.txt,长度为8的a_8.txt,以及长度大于8的others。这样,dictionary.txt最后被分割成了6×26+1=157个子文件,就不会像处理dictionary.txt那样笨重了,毕竟CPU有限。

为啥wordpress里面粘贴代码都只有黑乎乎的一片呢,可爱的语法高亮在哪里?还是喜欢五颜六色的代码段啊,上图吧!

只需10秒左右,就生产了157个文件,a_1to3,a_4,a_5…b_1to3,b_4,b_5…z_1to3,z_4,z_5,z_6,z_7,z_8,others
这样分开来处理好多了。

分享到:

Ruby快速导览

Ruby类和对象
root@bt:~# gedit ~/friendly.rb
编辑内容如图中左边部分,右边shell里面的是运行结果:
ruby-class-object

Object类和Kernel模块
Object类是所有Ruby类的始祖,会在我们运行Ruby程序的时候自动出现,无需特别地语句召唤。Object类提供了class、inspect、object_id、to_s等方法
Kernel是Ruby的一个模块(module),模块很像类,但不能像类一样被实例化。不过在类里面包含或混入模块的时候不需要事先,即可在该类里面直接使用属于模块的方法。
Object类包含了Kernel模块。所以既然任何Ruby都能使用Object类,也就能使用所有属于Kernel的方法。最常用的Kernel方法有:print,puts,eval,exit,gets,loop,require,sleep,sprintf。

Ruby的注释
#我是一行注释
或者
=begin
我是第一行被注释的
我是第二行被注释的
我是第三行被注释的
=end

Ruby的变量类型
Ruby中变量的类型是动态类型(dynamic typing),一句话就是“行动似鸭就是鸭”(duck typing)。它不像C/C++和JAVA一样都是静态类型(statically typed),Ruby中不需要在声明变量的时候就指定它的类型,因为在ruby中变量的类型不是固定不变的,Ruby会自动为我们判断添加类型,我们在irb模式下验证这一点:
root@bt:~# irb
irb(main):001:0> x=5
=> 5
irb(main):002:0> x.class                     #询问x的类型
=> Fixnum
irb(main):003:0> x.kind_of? Integer     #询问Ruby x是否是整数类型
=> true
irb(main):004:0> x=10.5
=> 10.5
irb(main):005:0> x.class
=> Float
irb(main):006:0> x.kind_of? Float        #询问Ruby x是否是浮点数类型
=> true
irb(main):007:0> x=’Hello,snailgo’
=> “Hello,snailgo”
irb(main):008:0> x.class
=> String
irb(main):009:0> x.kind_of? String       #询问Ruby x是否是字符串类型
=> true

Ruby并行赋值
root@bt:~# irb
irb(main):001:0> x,y,z=100,’hello,world’,99.56
=> [100, "hello,world", 99.56]

Ruby字符串操作
root@bt:~# irb
irb(main):001:0> string=’Hello,snailgo’
=> “Hello,snailgo”
irb(main):002:0> string1=string[0..4]        #截取第1至第5位
=> “Hello”
irb(main):003:0> string2=string[-7..-1]      #截取倒数第1位至倒数第7位
=> “snailgo”

Ruby数值计算
root@bt:~# irb
irb(main):001:0> 3+4
=> 7
irb(main):002:0> 12/3
=> 4
irb(main):003:0> 12**2
=> 144
irb(main):004:0> 12%5
=> 2
irb(main):005:0> x=5
=> 5
irb(main):006:0> x+=1
=> 6
irb(main):007:0> x-=2
=> 4
irb(main):008:0> x*=4
=> 16
irb(main):009:0> x/=2
=> 8
irb(main):010:0> Math.sqrt(16)
=> 4.0

Ruby if条件语句
value=0
if value.zero? then
puts “value is zero!”
end

Ruby数组与哈希
数组是采用非负整数为索引,哈希可以采用任意值为索引
root@bt:~# irb
irb(main):001:0> x=['zero','one','two']                        #建立一个数组
=> ["zero", "one", "two"]
irb(main):002:0> x[0]
=> “zero”
irb(main):003:0> y={‘indexa’=>’valueA’,'indexb’=>’valueB’,'indexc’=>’valueC’}
                                                                          #建立一个哈希表
=> {“indexa”=>”valueA”, “indexb”=>”valueB”, “indexc”=>”valueC”}
irb(main):004:0> y['indexb']
=> “valueB”

Ruby中方法的命名
如果方法最后一个字符是‘’,则该方法返回true或者false,比如上面的kind_of?,eql?,zero?等
如果方法最后一个字符是‘!’,则会对对象本身造成修改,而不是对象的副本。
如果方法最后一个字符是‘=’,则该方法为’setter’,用来赋值用。

Ruby可变参数数目
只要在参数前面加‘*’号,传递给该方法的参数数目就可以灵活的改变
def num_args(*args)

end

puts num_args
puts num_args(1)
puts num_args(100,2,5,’three’)

分享到:

Ruby一些特性

[adsense_id="5"]
REXML处理XML
process_xml.rb
require “rexml/document”
file=File.new(“/tmp/test.xml”)
doc=REXML::Document.new file
puts doc.to_s

Ruby中的类
root@bt:~# gedit ~/helloworld.rb 编辑内容如下:
class Hello
def initialize(name)
@name=name
end

def hello_snail
puts “Hello, ” + @name + “!”
end
end
hi = Hello.new(“snail”)
hi.hello_snail
保存,在终端运行:
root@bt:~# ruby ~/helloworld.rb
Hello, snail!

Tk工具函数库
利用TK工具库建立一个图形的“Hello World”
root@bt:~# gedit ~/helloworld.rb 编辑内容如下:
require “tk”
hello=TkRoot.new #新建名为hello得tkroot对象
TKLabel.new(hello) do
text “\n Hello,world! \n”
pack
end
Tk.mainloop
保存,在终端运行
root@bt:~# ruby ~/helloworld.rb
如果没有什么意外的话,应该出现一个图像标签显示:Hello,world!
不幸的是我的ruby貌似有tk库什么的没有安装,提示:
/root/helloworld.rb:3:in `require’: no such file to load — tk (LoadError)
用关键字:“no such file to load — tk”在网上搜了下无果,等以后有时间再研究。

Interactive Ruby——irb
互动性的命令行环境,就是你每输入一段语句,就会即时呈现结果或者错误。记住是每一步都有相应提示哦。这个功能跟我以前用过的matlab有点类似。默认安装ruby的时候就已经安装了irb
root@bt:~# irb -v                       #查询irv版本
irb 0.9.6(09/06/30)
root@bt:~# irb                           #进入irb模式
irb(main):001:0> puts “hello,world”
hello,world
=> nil                                        #返回值,差不多同null
irb(main):002:0> name=”snail”     #定义参数
=> “snail”
irb(main):003:0> puts “hello, ” + name+”!”
hello, snail!                                #显示参数
=> nil
irb(main):004:0> x=5
=> 5
irb(main):005:0> y=6
=> 6
irb(main):006:0> total=x+y
=> 11                                     #加法运算
irb(main):007:0> puts “total=x+y=” + x+y
TypeError: can’t convert Fixnum into String
from (irb):6:in `+’
from (irb):6
from /usr/bin/irb:12:in `’          #出错提示也有

好了,今天先学习到这,发现ruby越来越有趣了。

分享到: