Ruby中的文本处理

 在《Ruby基础教程》中,作者为了详细说明对文本的操作举了一个非常生动的例子。我在学习的时候有一些地方不太理解,标记如下,与大家共勉。

Encoding.default_external = Encoding.find('utf-8')

pattern = Regexp.new(("(.{0,10})("+ARGV[0]+")(.{0,10})").to_s.encode('utf-8'))
filename = ARGV[1]

count = 0
File.open(filename) do |file|
file.each_line do |line|
  line.scan(pattern) do |s|
    prefix_len = 0
    s[0].each_char do |ch|
       if ch.ord < 128
         prefix_len += 1
       else
         prefix_len += 2
       end
    end
    space_len = 20 - prefix_len
    puts "#{" "*space_len}#{s[0]}<<#{s[1]}>>#{s[2]}"
    count += 1
    end
  end
end
puts "count: #{count}"

 1.关于正则表达式

Ruby中定义了sub,gsub和scan三个方法来接收正则表达式,上面示例中使用了scan方法。

2.关于ch.ord方法

可以获取字符编码的码位。本例中,由于码位小于 128 时即为 ASCII 码,这时将长度加 1,除此以外的情况下则加 2,这些都是为了确定空白个数 space_len 以确保 20 个字符。然后再在 s[0] 之前留出与字符数相应的空白,这样输出结果就整齐多了。

发布了30 篇原创文章 · 获赞 10 · 访问量 5262

猜你喜欢

转载自blog.csdn.net/wufeng_no1/article/details/86311292
今日推荐