就個人而言,如果您正在查找具有空值或空值的屬性,我會處理它稍微慢一些,並使用[String]
方法IsNullOrWhitespace()
。我想RegEx匹配"^\w*?$"
和-or $_ -eq $null
會做同樣的事情,但這對我來說似乎更清潔,爲什麼重新發明輪子?
現在,你想檢查所有的屬性,或只是特定的?如果你想看到有空任何字段,你可以這樣做的所有條目:
$AllBooks = import-csv c:\path\to\file.csv
$Props = $AllBooks[0] | Get-Member -MemberType Properties | Select -Expand Name
ForEach($Book in $AllBooks){
If(($Props | Where{[String]::IsNullOrWhiteSpace($Book.$_)}).Count -gt 0){$Book}
}
如果你不關心的是空格,你可以使用IsNullOrEmpty()
這是更快,或者你可以做[String]:IsNullOrEmpty($Book.$_.Trim())
刪除條目任何空格。
該代碼將導入CSV,從第一個條目收集可能的屬性列表(導入的CSV所有記錄都應該具有相同的屬性,這應該是安全的)。然後,對於每條記錄,它將循環屬性列表,並檢查它們中的任何一條是否爲該記錄爲空,如果是,則輸出該記錄。如果你想收集這些條目,你可以收集整個ForEach
循環的變量。例如:
$BadEntries = ForEach($Book in $AllBooks){
然後,您將有$ BadEntries使用。
如果只用一個領域而言,說「標題」,這成爲可笑的簡單...
$AllBooks | Where{[string]::IsNullOrEmpty($_.Title.Trim())}
我試着去統計有多少空值它們是整個CSV,我認爲這將通過遍歷每個領域是最好的方法 – user1807844