![](/img/trans.png)
[英]How do I read/write raw hex bytes from input/output stream in BluetoothChat?
[英]How do I read line 3 from the console output in Ruby?
我想在控制台上閱讀每一行,然后用" "
分隔。
控制台上的輸出為:
List of devices attached
0125Mt3B19ct7343 device
07v6584d0a8a6cy7 device
由於要將多個Android設備連接到USB集線器,因此我希望以陣列的形式獲取設備ID。
到目前為止,這是我所做的:
class Init
$devices = Array.new
def getDevice
cmd = "adb devices"
value = `#{cmd}`
$deviceCount = value.lines.count
puts "#$deviceCount Devices are Connected to the USB Hub"
puts $deviceCount
..........
end
上面的代碼無用,因為我無法正確獲取連接設備的數量。 我正在使用lines
因為我無法弄清楚還能使用什么。
我想在終端上讀取輸出,並跳過第一行“已連接的設備列表”,然后拆分具有設備ID的以下行,以便將它們插入僅包含設備ID的數組中。
例如:
devices[] = {0125Mt3B19ct7343, 07v6584d0a8a6cy7, ... }
這是未經測試的代碼版本,更加習慣於編寫:
class Devices
@@devices = []
def self.get_devices
@@devices = `adb devices`.split("\n")[1 .. -1]
device_count = @@devices.size
puts "#{ device_count } Devices are Connected to the USB Hub"
puts device_count
end
end
devices = Devices::get_devices
注意事項:
DeviceList
可能是一個更好的名稱。 $devices
...嗯...是完全錯誤的。 除非您了解全局的用途,否則不要使用全局的。 而是使用類變量,例如在名為Devices
的類的情況下使用@@devices
。 Array.new
非常漂亮,但是沒有完成[]
為此目的所做的任何事情,因此請使用更短,更簡潔的[]
。 def getDevice
請勿將camelCase用於Ruby方法。 按照約定,方法和變量為snake_case,類和模塊為camelCase。 如果您打算發布代碼或獲得對Ruby或Rails進行編程的工作,請遵循約定。 split("\\n")[1 .. -1]
將從`adb devices`
接收的輸出分為`adb devices`
行,並將第二行返回到最后一行。 這意味着您可以立即刪除返回的“連接的設備列表”行。 設計此類界面始終是一種學習經驗。 您可能希望能夠在上次輪詢時獲取設備的當前列表,並且還有另一種方法可以立即獲取當前設備並更新最近見過的設備的變量:
class DeviceList
@@devices = []
def self.get_devices
@@devices = `adb devices`.split("\n")[1 .. -1]
end
def self.device_list
get_devices() if @@devices.empty?
@@devices
end
end
devices = DeviceList::get_device_list
device_count = devices.size
puts "#{ device_count } Devices are Connected to the USB Hub"
puts device_count
這使您可以使用Devices::device_list
請求當前列表,或使用Devices::get_devices
強制重新加載列表。 還要注意,這會從類中刪除輸出並返回列表的大小計數。 這些動作可以在類中發生,但是對於這種類型的代碼,我可能會依賴Ruby的打印列表功能,並使類僅返回設備列表。 因人而異。
Stack Overflow上有很多聰明的人,他們可以幫助您使用正確的分類法來定義方法等的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.