我几乎是一个 Ruby-nOOb(只有 Ruby 知识来编写一些基本的 .erb 模板或 Puppet 自定义事实)。看起来我的要求相当简单,但我无法理解它。
尝试编写一个.erb
模板,它将一个文件(用空格分隔的行)读取到一个数组中,然后根据要求处理每个数组元素。这是我到目前为止得到的:
fname = "webURI.txt"
def myArray()
#if defined? $fname
if File.exist?($fname) and File.file?($fname)
IO.readlines($fname)
end
end
myArray.each_index do |i|
myLine = myArray[i].split(' ')
puts myLine[0] +"\t=> "+ myLine.last
end
哪个工作得很好,除了(出于明显的原因)被注释掉的行或空白行。我还想确保当(按空格)向上吐出时,该行中的字段不应超过两个;像这样的文件:
# This is a COMMENT
#
# Puppet dashboard
puppet controller-all-local.example.co.uk:80
# Nagios monitoring
nagios controller-all-local.example.co.uk::80/nagios
tac talend-tac-local.example.co.uk:8080/org.talend.admin
mng console talend-mca-local.example.co.uk:8080/amc # Line with three fields
所以,基本上我想实现这两件事:
- 将行读入数组,在第一个之后剥离所有内容
#
- 如果数字 id 超过两个,则拆分每个元素并打印一条消息
任何帮助将不胜感激。干杯!!
2002 年 2 月 25 日更新
谢谢你的帮助!
这blank
件事根本不起作用;抛出这个错误;但我有点不明白为什么:
未定义的方法“空白?” 对于“\n”:字符串(NoMethodError)
我得到的数组:myArray
实际上是这样的(使用p
而不是puts
:
["\n", "puppet controller-all-local.example.co.uk:80\n", "\n", "\n", "nagios controller-all-local.example.co.uk::80/nagios\n", ..... \n"]
因此,我不得不这样做来解决这个问题:
$fname = "webURI.txt"
def myArray()
if File.exist?($fname) and File.file?($fname)
IO.readlines($fname).map { |arr| arr.gsub(/#.*/,'') }
end
end
# remove blank lines
SSS = myArray.reject { |ln| ln.start_with?("\n") }
SSS.each_index do |i|
myLine = SSS[i].split(' ')
if myLine.length > 2
puts "Too many arguments!!!"
elsif myLine.length == 1
puts "page"+ i.to_s + "\t=> " + myLine[0]
else
puts myLine[0] +"\t=> "+ myLine.last
end
end
非常欢迎您改进代码。干杯!!