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一些特性

[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越来越有趣了。

分享到:

Ruby语法简介

字符串拼装
使用简单的‘+’号即可。如: puts “Hello, ” + “World!”
使用‘<<’也可以。如:put “Hello, ” << “World!”

输出多次字符串
puts “Hello,World!” *3            #输出3个Hello,World!
3.times (print “Hello,World!”)  #输出3个Hello,World
puts “Hello, ” *3 + “World!”    #输出3个Hello,和一个World

插入对Shell命令的调用
puts “Hello,World!” + `ruby –version`  #输出Hello,world!ruby 1.9.2dev (2010-07-02) [i486-linux]
请注意shell命令要用重音记号括起来,重音记号就是Tab键上方那个。

变量使用
root@bt:/home/rubytest# gedit test.rb
编辑内容如下:
name=”snail ”
age=”16″
puts “My name is “+ name +”.I am “+ age + ” years old.”
保存。

root@bt:/home/rubytest# ruby test.rb
My name is snail.I am 16 years old.

表达式——#{表达式内容}
name= “snail!”
puts “Hello, #{name}”    #输出Hello,snail!

可以利用表达式还可以从命令行接收参数
puts “Hello, #{ARGV[0]}, #{ARGV[1]}”
终端输入:root@bt:/home/rubytest# ruby test.rb snail Morning
显示:Hello, snail, Morning
注意终端参数直接是以空格为分界线的,所以你如果输入 ruby test.rb snail Good Morning
那么显示的是:Hello,snail, Good
这是一个缺陷。

格式化字符串
hi=”Hello,%s”
puts hi % “world!”   #输出Hello world!
puts hi %”snail!”    #输出Hello snail!

ruby -e
使用ruby -e可以直接在命令行输出内容,而不必像之前那样先写到文本里面再保存成.rb文件后在终端执行。
root@bt:~# ruby -e “puts ‘hello,world’”
hello,world
root@bt:~# ruby -e “puts ‘hello’” -e “puts ‘world’”
hello
world
root@bt:~# ruby -e “print ‘hello ‘” -e “puts ‘world’”
hello world
以上也可以看出,print和puts的一个区别就是print不自带换行符,而puts自带换行符

利用分号‘;’可以在一个-e里面执行多条语句
比如:
root@bt:~# ruby -e “a=3;puts ‘hello ‘*a”
hello hello hello

接收键盘输入
print “please input whatever:”
whatever=gets
puts “you input: ” + whatever
终端:
root@bt:~# ruby helloworld.rb
please input whatever:54xiaowoniu
you input: 54xiaowoniu

调用自定义方法
root@bt:~# gedit method.rb
打开编辑如下内容:
def mymethod
puts “This is a self_method!”
end                #自定义方法mymethod,只输出一行显示
mymethod      #调用自定义的方法mymethod
保存。
root@bt:~# ruby method.rb
This is a self_method!

语句块结构
root@bt:~# gedit method.rb
打开编辑如下内容:
def mymethod
yield
end                                            #定义方法mymethod,只有一句yield语句
mymethod {puts “Hello,snailgo!”}  #yield会执行大括号里面的代码
保存。
root@bt:~# ruby method.rb
Hello,snailgo!

each方法显示数组所有元素
root@bt:~# gedit test.rb
打开编辑如下内容:
["Hello, ","snail!"].each{|e| print e}
保存。
root@bt:~# ruby test.rb
Hello,snailgo!

OK,先学习到这里,以后继续!

分享到: