DyadyaGenya
Знающий
- Сообщения
- 309
- Репутация
- 10
Добрый день. Получаю кучу всяких смарт данных винчестера и слаживаю их в массив. Зарезервированных значений много. Но не все используются различными производителями, поэтому массив каждый раз разный по размеру, и ложить пустую строку (пустое значение переменной) в массив не хочется. Делаю так:
Где и на каком этапе и как более правильно отсекать такие строки (переменные)?
Код:
#include <Constants.au3>
#include <Array.au3>
Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Global $Smart[0][8]
Global $sTemp, $sTemp231, $sTemp1
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\WMI")
$colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$iCnt = 1
For $Item In $colItems
$strReserved = $Item.Reserved
$strVendorSpecific = $Item.VendorSpecific
$iCnt +=1
Next
For $i = 2 to UBound($strVendorSpecific) - 1 Step 12
If $strVendorSpecific[$i] == 0 then ContinueLoop
If $strVendorSpecific[$i] = 1 Then $sPark = $strVendorSpecific[$i] &'|'& $strVendorSpecific[$i + 1] &'|'& $strVendorSpecific[$i + 2] &'|'& $strVendorSpecific[$i + 3] &'|'& $strVendorSpecific[$i + 4] &'|'& $strVendorSpecific[$i + 5] &'|'& $strVendorSpecific[$i + 6]
If $strVendorSpecific[$i] = 2 Then $sP = $strVendorSpecific[$i] &'|'& $strVendorSpecific[$i + 1] &'|'& $strVendorSpecific[$i + 2] &'|'& $strVendorSpecific[$i + 3] &'|'& $strVendorSpecific[$i + 4] &'|'& $strVendorSpecific[$i + 5] &'|'& $strVendorSpecific[$i + 6]
If $strVendorSpecific[$i] = 3 Then $sT = $strVendorSpecific[$i] &'|'& $strVendorSpecific[$i + 1] &'|'& $strVendorSpecific[$i + 2] &'|'& $strVendorSpecific[$i + 3] &'|'& $strVendorSpecific[$i + 4] &'|'& $strVendorSpecific[$i + 5] &'|'& $strVendorSpecific[$i + 6]
If $strVendorSpecific[$i] = 194 Then $sTemp = $strVendorSpecific[$i] &'|'& $strVendorSpecific[$i + 1] &'|'& $strVendorSpecific[$i + 2] &'|'& $strVendorSpecific[$i + 3] &'|'& $strVendorSpecific[$i + 4] &'|'& $strVendorSpecific[$i + 5] &'|'& $strVendorSpecific[$i + 6]
If $strVendorSpecific[$i] = 231 Then $sTemp231 = $strVendorSpecific[$i] &'|'& $strVendorSpecific[$i + 1] &'|'& $strVendorSpecific[$i + 2] &'|'& $strVendorSpecific[$i + 3] &'|'& $strVendorSpecific[$i + 4] &'|'& $strVendorSpecific[$i + 5] &'|'& $strVendorSpecific[$i + 6]
Next
_ArrayAdd($Smart, $sPark)
_ArrayAdd($Smart, $sP)
_ArrayAdd($Smart, $sT)
_ArrayAdd($Smart, $sTemp)
_ArrayAdd($Smart, $sTemp231) ; Это обычно пустое значение для проверки
_ArrayDisplay($Smart, 'Smart', Default, '', Default, "ID|Attribute|Type|Flag|Threshold|Value|Worst|Status")
Где и на каком этапе и как более правильно отсекать такие строки (переменные)?