我几乎是一个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
所以,基本上这两件事我想实现:
#
非常感谢任何帮助。干杯!!
<小时/> 更新 25/02
感谢你的帮助!!
blank
这件事根本不起作用;抛出这个错误;但我有点不明白为什么:
未定义的方法`空白?&#39; for&#34; \ n&#34;:String(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
欢迎您改进代码。欢呼声!!
答案 0 :(得分:1)
goodArray = myArray.reject do |line|
line.start_with?('#') || line.split(' ').length > 2
end
这会拒绝以#开头的任何内容,或者split会返回一个包含两个以上元素的数组,返回一个只包含好项的数组。
修改强>
对于您的内联评论,您可以执行
goodArray.map do |line|
line.gsub(/#.*/, '')
end