# How to check if a property is null/empty in a CSV

Hi,

I have a CSV with several properties like PersonalArea;Employeenumber;…

I want to count the lines in this CSV but only these where the property “Employeenumber” is not null and the PersonalArea is equal to “myLocation”.

Currently, I got the following code:

$filepath = "C:path\to\csv"$CSV = Import-Csv -Path $filepath -Delimiter ";" -Encoding UTF8 | Measure-Object$a = $CSV | Where-Object {$_.PersonalArea -eq "myLocation -and $_.Employeenumber -ne$null}
#count lines where the expression is true
$a.count #count all lines except op the first one$CSV.count

Here is an CSV example:

PersonalArea;Employeenumber

myLocation;123456

myLocation;234567

otherLocation;345678

otherLocation;

Currently, I get the following output:

$a.count --> 0$CSV.count --> 4

Can someone tell me why I getting a wrong output on $a.count? I appreciate your help. If I got it right you should check for an empty string instead of$null because Import-Csv only returns strings not objects.

I already tested it out with an empty string…same result

$a =$CSV | Where-Object {$_.PersonalArea -eq "myLocation -and$_.Employeenumber -ne ""}

OR

$a =$CSV | Where-Object {$_.PersonalArea -eq "myLocation -and$_.Employeenumber -ne ''}

And why not just

CSV | Where-Object {.PersonalArea -eq "myLocation -and $.Employeenumber} I didn’t know this works. But it doesn’t work either. It does work for me with my sample data. Could you please post a few sanitized but still representative rows of your CSV file? Please format it as code. I’m using the same CSV data for testing as I mentioned above. Can you post your code? PersonalArea;Employeenumber myLocation;123456 myLocation;234567 otherLocation;345678 otherLocation;  $CSVData = @'
PersonalArea;Employeenumber
myLocation;123456
myLocation;234567
otherLocation;345678
otherLocation;
'@ | ConvertFrom-Csv -Delimiter ';'

($CSVData | Where-Object {$_.Employeenumber}).count

$CSVData.Count That’s the actual code I’m using to check if it works. The output is this: PS C:\>$CSVData = @'
PersonalArea;Employeenumber
myLocation;123456
myLocation;234567
otherLocation;345678
otherLocation;
'@ | ConvertFrom-Csv -Delimiter ';'

($CSVData | Where-Object {$_.Employeenumber}).count

$CSVData.Count 3 4 PS C:\> Now it works. First I have added the brackets + .count ($CSVData | Where-Object {$_.Employeenumber}).count Then I removed these changes and tested it again with my code… $filepath = "C:\path\to\csv"
$CSV = Import-Csv -Path$filepath -Delimiter ";" -Encoding UTF8
$a =$CSV | Where-Object {$_.PersonalArea -eq "myLocation" -and$_.Employeenumber}
$a.count #count lines where the expression is true #$a.count
#count all lines except op the first one
$CSV.count The output is correct in both test cases. Thank you. Could you explain why you are using$.Employeenumber instead of $.Employeenumber -ne ’ ’ ? Is it just shorter or is there another reason? I think the problem was the piping of Measure-Object $CSV = Import-Csv -Path \$filepath -Delimiter ";" -Encoding UTF8 | Measure-Object

Ooops … I missed that completely until you just mentioned it now. Sorry.

Mostly I’m really bad with explaining of what’s going on under the hood. Personally I like to write the code as short as possible but still as descriptive and detailed as possible without using aliasses or abbreviations.

BTW: Sometimes it’s easier to ask a quesiotn in your native language. There are German Powershell-related forums as well like MCSEBoard.de or the German Microsoft Technet Powershell forum.

Tschüß

Danke für den Tipp Vielen Dank für die Hilfe.

Tschüss.