私はほとんどRuby-nOObです(いくつかの基本的な.erbテンプレートまたはPuppetカスタムファクトを作成するRubyの知識しかありません)。私の要件はかなり単純に見えますが、頭に浮かびません。
.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
(明らかな理由で)コメントアウトされた行または空白行を除いて、これは問題なく機能します。また、(スペースによって)吐き出されたときに、行に2つ以上のフィールドが含まれないようにする必要もあります。次のようなファイル:
# 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
だから、基本的に私が達成したいこれらの2つのこと:
- 行を配列に読み取り、最初の行以降のすべてを取り除きます
#
- 各要素を分割し、番号 ID が 2 を超える場合はメッセージを出力します
どんな助けでも大歓迎です。乾杯!!
更新25/02
助けてくれてありがとう!
blank
ことはまったく機能しません。このエラーをスローします。しかし、私はその理由をちょっと理解できませんでした:
未定義のメソッド「空白?」"\n":文字列 (NoMethodError) の場合
私が得るarray: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
コードを改善することを大歓迎します。乾杯!!