这是为了回答我自己的问题,与我原来的问题相比,这完全不同,但它完全(嗯,或多或少)用于相同的目的。因此,正如 Sergio 建议的那样:假设示例输入文件是这样的:
maci:ruby san$ cat OSs.txt
Slackware, Linux, i-num=1
Jaguar, MacX, i-num=6
Chicago, this_Win, i-num=2
Daytona, an_other_Win, i-num=7
RedHat, Linux, i-num=5
Lion, MacY, i-num=4
Caldera, Linux, i-num=9
Longhorn, that_Win, i-num=8
Tiger, MacZ, i-num=3
Indiana, Solaris, i-num=10
Kodiak, MacX, i-num=11
实际文件是使用可变数量的操作系统动态创建的,即该文件可能有也可能没有Mac
或根本没有Win
。从那里开始,这就是我到目前为止所想到的......
inFile = "OSs.txt"
os = {}
open(inFile, 'r').each do |line|
next if line =~ /^\s*(#|$)/
if line.split(',').map(&:strip)[1] =~ /^Mac/
(os[:Mac] ||= []) << line.split(',').map(&:strip)[0]
end
if line.split(',').map(&:strip)[1] =~ /_Win$/
(os[:Win] ||= []) << line.split(',').map(&:strip)[0]
end
if line.split(',').map(&:strip)[1] !~ /(^Mac|_Win$)/
(os[:Linux] ||= []) << line.split(',').map(&:strip)[0]
end
end
os.each_key do |cls|
p "%s [%s]" % [os[cls][0], os[cls].count]
end
它几乎是在做我真正想做的事情,但我相信有很多更好的方法可以做到这一点。干杯!!