Ruby入门学习之四

~_~今天周六,明天写文档,所以今天又看了一些Ruby的东西。贴代码。

另外贴一个Vim下Ruby自动补全的配置。

http://hooopo.iteye.com/blog/426782

 

    1 IO类

io = open("foo.txt"){|eo|
  while line = eo.gets
    puts line
  end
}
io = open("foo.txt")
io.close
#判断io对象是否关闭
p io.closed?

require "open-uri"
#通过HTTP读取数据
open("http://www.ruby-lang.org"){|io|
  puts io.read

}

io = open("foo.txt")
while line = io.gets

  line = chomp!
end
p io.eof?
io.close

io = open("foo.txt")
while line = io.gets
  printf("%3d %s",io.lineno, line)
end
io.close


puts "a","b","c"

#pos方法
io = open("foo.txt")
p io.read(5)
p io.pos
io.pos
io.pos = 0
p io.gets
#将文件指针移到文件最前端
io.rewind
p io.pos
p io.gets

puts "-------------------------练习----------------------"
def fun(filename)
  io = open(filename)
  l = 0
  w = 0
  c = 0
  while line = io.gets
    l += 1
    c += line.size
    line.sub!(/^\s+/,"")
    ary = line.split(/\s+/).size
    w += ary.size
  end
  printf("        行数   单词数  字符数  文件名\n")
  printf("%8d %8d %8d %s\n",l,w,c,filename)
end
fun("foo.txt")

    2 Regexp(正则表达式类)

#建立正则表达式
r1 = /Ruby/
p r1
r2 = Regexp.new("Ruby")
p r2
r3 = %r(Ruby)
p r3
#^ $分别表示行头与行尾
p /^ABC$/ =~ "012\nABC"		#!注意匹配的是行头行尾,非字符串头与尾
print str = "ABC\nABC"		#ABC
				#ABC
#\A \Z分别表示字符串头与字符串尾	
p /\AABC\Z/ =~ str 		#=>nil
#[]表示与其中任何一个匹配
p /[012ABC]/ =~ "A"		#=>0
p /[012ABC]/ =~ "ACD"		#=>0
#[-]表示范围
p /[A-Za-z]/ =~ "1dshhuSSFF"	#=>1
p /[A-Za-z_-]/ =~ "12--"	#=>2
p /[^A-Za-z_-]/ =~ "--"		#=>nil
#.代表一个字,不管是什么
p /A.C/ =~ "A1C"		#=>0
p /A..C/ =~ "A11C"		#=>0
p /A..C/ =~ "A1C"		#=>nil
#\s表示空白(空格,tab,换行,换页)
p /A\sB/ =~ "A B"		#=>0
p /A\sB/ =~ "A\tB"		#=>0
p /A\sB/ =~ "A\nB"		#=>0
p /A\sB/ =~ "AB"		#=>nil
#\d与0~9匹配
#\w与英文和数字匹配
#*表示前面紧挨着的一个字符出现与不出现都匹配
#+表示前面紧挨着的一个字符出现才匹配
#?表示前面紧挨着的一个字符出现1次或者不出现才匹配
p /12A*/ =~ ""			#=>nil
p /12A*/ =~ "12"		#=>0
p /^Subject:\s*.*$/ =~ "Subject: foo"

#?前面的字符为.,表示任意字符,也就是说任意字符出现或出现一次
#.?两个加一起是一个字符或没有字符
p /A.?C/ =~ "AC"		#=>0
p /A.C/ =~ "AC"			#=>nil
#*? +?最短匹配
p "ABCDABCDABCD".slice(/A.*B/)	#=>"ABCDABCDAB"
p "ABCDABCDABCD".slice(/A.*?B/)	#=>"AB"
#()配合* + ?表示多个字的反复
p /(ABC)+/ =~ "daABCABC"
#表示括弧里匹配结果
p $1

#|表示多选
p /(AB|CD)/ =~ "CD"
p $1
#$’$&$‘中间的表示匹配部分
p $’				#=>nil
p $&				#=>"CD"
p $‘				#=>nil
#sub,gsub会取代字符串,不同之处在于sub只取代第一处
#gsub全部取代
str = "THis is a man"
p str.downcase!.capitalize!.gsub!(/\s./){|matched|	#=>"This Is A Man"
    matched.upcase
  }
p str				#=>"This Is A Man"

#scan只查找所有匹配的,不取代
"abraca".scan(/.a/){|matched|
  p matched				#=>"ra"
}					#=>"ca"
"abraca".scan(/(.)(a)/){|a,b|
  p a + b				#=>"ra"
}					#=>"ca"
"abraca".scan(/(.)(a)/){|matched|	#=>["r","a"]
  p matched				#=>["c","a"]
}
puts "----------------------------练习-----------------------"
p /(.*)@(.*)/ =~ "dsd@gmail.com"
p $1
p $2

str = "in-rEp-to"
p str.downcase!.capitalize!.gsub!(/-./){|matched|	
    matched.upcase
  }

    3 Dir类和File类

def traverse(path)
  if FileTest.directory?(path)
    dir = Dir.open(path)
    p dir
    while name = dir.read
      next if name == "."
      next if name == ".."
      traverse(path + "/" + name)
    end
    dir.close
  else
    process_file(path)
  end
end

def process_file(path)
  puts path
end
traverse("/home/anity/xxx")           #/home/anity/xxx/aa
p Dir.pwd
p File.expand_path("bin")
p Dir.pwd
p File.expand_path("../bin")

require 'etc'
include Etc
st = File.stat("/home/anity/ruby")
pw = getpwuid(st.uid)
p pw.name
gr = getgrgid(st.gid)
p gr.name

filename = "/home/anity/ruby/foo.txt"
open(filename,"w").close

st = File.stat(filename)
p st.ctime
p st.mtime
p st.atime

File.utime(Time.now - 100 , Time.now - 100 ,filename)
st = File.stat(filename)
p st.ctime
p st.mtime
p st.atime

p File.basename("/home/anity/ruby/foo.txt")
p File.basename("/home/anity/ruby/foo.txt",".txt")
p File.dirname("/home/anity/ruby/foo.txt")
p File.dirname("foo.txt")
p File.extname("/home/anity/ruby/foo.txt")
p File.split("/home/anity/ruby/foo.txt")
dir , base = File.split("/home/anity/ruby/foo.txt")
p dir
p base
p File.join(dir , base)

    4 Time类,DateTime类,Date类

t = Time.new
p t
t = Time.now
p t
p t.year
p t.month
p t.day
p t.hour
p t.min
p t.sec
p t.to_i
p t.wday
p t.mday
p t.yday
p t.zone

t = Time.mktime(2009,12,11,3,15,59)
p t
p t.strftime("%Y/%m/%d %H:%M:%S")
p t.strftime("%a %b %d %H:%M:%S %Z:%Y")

t = Time.now
p t
t.utc
p t

require "date"

t1 = DateTime.now
sleep(1)
t2 = DateTime.now
p t2 - t1

t = DateTime.now
puts t
puts t + 10

require "date"
d = Date.today
puts d.year
puts d.month
puts d.day
puts d
puts Date.new(2009,2,-1)
puts d + 1
puts d - 2
puts d >> 3
puts d << 10

 基础居多,需要多加练习。:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值