0

リモートデバイスにこれに似たテキストファイルがあります。

 D0-23-DB-31-04-3E%20192.168.4.42%20dnat
 68-A8-6D-0C-38-B2%20192.168.4.40%20dnat

これを文字列に変換してRailsアプリケーションに投稿するための小さなRubyスクリプトを作成しました。

 def chilli_list
  hash = File.open("/tmp/client_list", "rb").read
  return hash
 end

出力は次のようになります。

"D0-23-DB-31-04-3E%20192.168.4.42%20dnat\n68-A8-6D-0C-38-B2%20192.168.4.40%20dnat\n" 

情報を少しずつ抽出してビューに表示する必要があります。これまでのところ、私は遠くに行っていません。私はOKである以下を試しました:

str = "D0-23-DB-31-04-3E%20192.168.4.42%20dnat\n68-A8-6D-0C-38-B2%20192.168.4.40%20dpass\n" 

str.each_line do |line|
  puts line.split(" ").first
  puts line.split(" ").second
end

それが最善の方法ですか、それとももっと良い方法がありますか?

最後に、そして最も重要なこととして、文字列に対していくつかの計算を実行する必要もあります。で行を数えることができますが、必要なのは、上記の例のようにstr.lines.count3番目の値が含まれる行の数です。== nat

どうすればそれについて行くことができますか?

4

1 に答える 1

2

まず、HTMLエンコーディングから通常の文字列に変換する方法は次のとおりです。

require 'uri'
URI.decode('D0-23-DB-31-04-3E%20192.168.4.42%20dnat') # => "D0-23-DB-31-04-3E 192.168.4.42 dnat"

文字列全体を個別のデコード行に分割する方法は次のとおりです。

"D0-23-DB-31-04-3E%20192.168.4.42%20dnat\n68-A8-6D-0C-38-B2%20192.168.4.40%20dnat\n".split("\n")
  .map{ |l| URI.decode(l) }

これにより、IRBでこの配列が作成されます。

[
    [0] "D0-23-DB-31-04-3E 192.168.4.42 dnat",
    [1] "68-A8-6D-0C-38-B2 192.168.4.40 dnat"
]

前のコマンドの最後に追加する.count{ |l| l[/ dnat$/] }と、カウントが表示されます。

"D0-23-DB-31-04-3E%20192.168.4.42%20dnat\n68-A8-6D-0C-38-B2%20192.168.4.40%20dnat\n".split("\n")
  .map{ |l| URI.decode(l) }
  .count{ |l| l[/ dnat$/] }

を返します2

'nat'発生数を直接カウントするだけで、プロセス全体を単純化することもできます。

"D0-23-DB-31-04-3E%20192.168.4.42%20dnat\n68-A8-6D-0C-38-B2%20192.168.4.40%20dnat\n".scan('nat').count

これも戻ります2

于 2012-08-14T19:19:38.430 に答える