2

私はほとんど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つのこと:

  1. 行を配列に読み取り、最初の行以降のすべてを取り除きます#
  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

コードを改善することを大歓迎します。乾杯!!

4

1 に答える 1

1
goodArray = myArray.reject do |line|
  line.start_with?('#') || line.split(' ').length > 2
end

これは、# で始まるもの、または分割が 3 つ以上の要素の配列を返し、適切な項目のみの配列を返すものを拒否します。

編集:

インラインコメントについては、次のことができます

goodArray.map do |line|
  line.gsub(/#.*/, '')
end
于 2013-02-24T20:58:54.857 に答える