我几乎是一个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超过两个
任何帮助将不胜感激。干杯!!
更新 25/02
感谢家伙对你有所帮助!
blank
东西根本不起作用;抛出这个错误;但我有点不明白为什么:
undefined method'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
你是最欢迎的提高代码的欢呼声!
。
您可能要添加一个'.reject(空白?)'太删除空行。 – gmaliar 2013-02-24 21:02:24
谢谢你!另外,我怎么剥离第一个'#'中的每一件东西来处理在线注释'(例如,Abc Bcd#in-line comment)'?干杯!! – MacUsers 2013-02-24 21:11:15
编辑我的答案。 – gmaliar 2013-02-24 21:18:43