第1章           与Ruby的第一次接触

Print(“Hello,\nRuby\n!\n”)

Hello,

Ruby

!

Print(‘Hello,\nRuby\n!\n’)

Hello,\nRuby\n!\n

使用“’‘”括住的字符串,并不会去解释“\n”之类的特殊字符,而会直接显示出来。不过有两个例外,那就是想要在字符串里包含“\”与“’”这两个字符时,前面还是必须加上“\”。例如:

print(‘Hello, \’Ruby\’.’)

print(‘Hello, \\ Ruby.’)

 

Ruby的方法允许省略“()”。另外,想要连续显示多个字符串时,可以使用“,”隔开,则这些字符串会依序显示出来。如: print(“Hello, ”, “Ruby”, “.”, “\n”)

 

puts方法与print方法不同,显示的字符串最后面一定会换行。

 

用来显示对象时很有用的p方法。

puts(“100”)    #=> 100

puts(100)      #=> 100

p “100”        #=> “100”

p 100          #=> 100

puts “Hello, \n\tRuby.”

p “Hello, \n\tRuby.”

Hello,

      Ruby.

“Hello, \n\tRuby.”

一般来说,print方法用在程序要显示出执行结果或消息的时候,而p方法则用在想要观察执行中的程序运行情况的时候。

若想要显示可能包括日文内容的对象,执行ruby程序时需要加上-Ks(Shift_JIS)、-Ke(EUC-JP)之类的环境参数,这些参数用来指定文字编码。针对中文字符串,可以指定-Ku参数(UTF-8)。如:

Windows环境          > ruby –Ks 脚本文件

 

include Math

print(“sin(3.1415) = ”, sin(3.1415) , “\n”)

print(“sqrt(10000) = ”, sqrt(10000), “\n”)

sin(3.1415) = 9.26535896604902e-005

sqrt(10000) = 100.0

print(“sin(3.1415) = ”, Math.sin(3.1415), “\n”)

 

注释使用“#”符号表示。一行中,从“#”的位置知道行尾都是注释。另外,从一行的开头写起的“=begin”与“=end”所包括的区域也会是注释。

 

用“==”比较字符串是否相同。用“!=”判断值是否相异。

if 条件 then

  条件符合时行为

else

  条件不符时行为

end

(*then可以省略)

while 条件 do

行为

end

 

(* do可以省略)

当次数确定时,首用”times”

反复次数.times {

行为

}

 

定义方法

def 方法名

   行为

end

将库读入程序

require “库名” (*库名可省略“.rb”部分)

     

需将库文件与使用该库文件方法的文件放在同一个目录下。

 

第2章           方便的对象

像数组、哈希这种用来存放对象的对象,又称为容器。

若指定的索引位置在当前的数组中不存在,则数组的大小会改变。在一个数组里,也可以存放不同类型的数组。

要获取数组的大小,可以使用size方法。

数组.each {|变量|

    重复执行的动作

}

name = [“Susan”, “Brenda”, “Helen”]

name.each {|n|

   print n, “\n”

}

 

建立哈希时使用“{}”,并要使用“=>”符号定义用来取出对象的键与该键取出的值。

font_table = {“normal” => “+0”, “small” => “-1”, “big” => “+1”}

从哈希里获取对象: 哈希名[键]

哈希没有固定的顺序,并不能“按存放时的顺序取出数据”。

哈希.each {|键的变量, 值的变量|

重复执行的动作

}

一般用key表示键的变量,value表示值得变量

 

要将ruby指令执行的结果储存到文件里,可以使用“重定向(redirect)”功能。执行程序的时候,在指令的后面加上“>文件名”,则输出会被存在文件里。

 

pp方法

pp是pretty print的缩写,使用pp方法时,需要预先通过require方法读入pp库程序文件。使用pp方法在程序执行的时候执行结果更为直观易懂。

v = [{“key_00” => “Susan”,

“key_01” => “Brenda”,

“key_02” => “Helen”}]

p v

pp v

[{“key_00” => “Susan”, “key_01” => “Brenda”, “key_02” => “Helen”}]

[{“key_00” => “Susan”,

“key_01” => “Brenda”,

“key_02” => “Helen”}]

 

 

正则表达式

建立正则表达式对象的语法如下: /样式/

当把正则表达式拿来匹配字符串时,就要使用“=~”运算符。语法: /样式/ =~ 想要匹配的字符串

p /Ruby/ =~ “Yet Another Ruby Hacker”     #=> 12

当匹配成功时,会返回匹配成功的位置。文字的位置与数组一样,是从0开始算的。而匹配失败时则会返回nil。

正则表达式右侧的“/”后面如果加上一个“i”,则匹配时就不区分大小写了。

p /Ruby/i =~ “rUBy”   #=> 0

 

nil是表示对象不存在的特殊值。在if和while条件判断中,false和nil都被作为“假”来处理,除此之外的其他取值都作为“真”来处理。因此不只是返回false和true的方法,其他的返回各种各样的值和nil的方法都可以作为判断条件。

 

第3章           指令设计

从命令行输入的数据

要取得命令行所传入的数据,可以使用“ARGV”这个数组对象。在ARGV数组中,以字符串的形式存放着在命令行对指令脚本传入的实参。

利用命令行给指令脚本指定参数的场合,在参数之间,需要用空格隔开进行输入。

num0 = ARGV[0].to_i

num1 = ARGV[1].to_i

print num0, “ + “, num1, “=”, num0+num1, “\n”

 

读取文件

filename = ARGV[0]

file = open (filename)

text = file.read

print text

file.close

filename = ARGV[0]

file = open (filename)

while text = file.gets do

   print text

end

file.close

从文件逐行读入数据并显示出来

(gets方法会在每次调用时,从文件里取出一行字符串)

 

只显示文件里符合特定样式的几行

“Regexp.new(str)”这种写法,可以使用实参的str字符串来建立正则表达式对象。

pattern = Regexp.new(ARGV[0])

filename = ARGV[1]

file = open(filename)

while text = file.gets do

   if pattern =~ text

      print text

   end

end

file.close

 

pp方法在使用时起到和p方法同样的效果和目的。pp是(pretty print)的缩写。使用pp方法时,需要预先通过require方法读入pp库程序文件。

  • 在文字的每一行前加编号;
  • 将日语全角的空白转为两个半角的空白;
  • 将特定规则的文字的行进行输出;
  • 将字幕全部转换为大写

 

对全体数据进行某些特定处理并输出的程序称为过滤器(Filter)。