[英]Extracting Information from a Ruby String
我在遠程設備上有一個與此類似的文本文件:
D0-23-DB-31-04-3E%20192.168.4.42%20dnat
68-A8-6D-0C-38-B2%20192.168.4.40%20dnat
我創建了一個小的Ruby腳本來將其轉換為字符串並將其發布到我的Rails應用程序:
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"
我需要逐位提取信息並在視圖中顯示。 到目前為止,我還沒有走得太遠。 我嘗試了以下可以:
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.count
計算行str.lines.count
,但我需要的是第三個值== nat
的行的計數,如上例所示。
我該怎么辦呢?
首先,這里是如何將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$/] }
.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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.