2014-04-19 84 views
0

我有一个.csv与几百条记录,我需要解剖到几个不同的文件。有一部分代码需要一个对象数组并基于数组过滤文件。它对于发现与数组中的内容相同的部分很有用,但是当我尝试根据数组中未包含的内容进行过滤时,它会忽略任何我能找到的“不等于”运算符的版本。我认为这与数据类型有关,但不能确定当平等运营商工作时为什么它会有所作为。Powershell阵列导出不等于运营商不工作

CSV文件
"Number","Ticket","Title","Customer User","CustomerID","Accounted time","Billing" 
"1","2014041710000096","Calendar issues","george.jetson","Widget, Inc","0.25","Labor","" 
"2","2014041710000087","Redirected Folder permission","jane.smith","Mars Bars, Inc.","1","Labor","" 
"3","2014041610000203","Completed with No Files Changed ""QB Data""","will.smith","Dr. Smith","0","Labor","" 
PowerShell代码
$msaClients = @("Widget, Inc","Johns Company") 
$billingList = import-csv "c:\billing\billed.csv" 
$idZero = "0" 

$msaArray = foreach ($msa in $msaClients) {$billingList | where-object {$_.CustomerID -eq $msa -and $_."Accounted time" -ne $idZero}} 
$laborArray = foreach ($msa in $msaClients) {$billingList | where-object {$_.CustomerID -ne $msa -and $_."Accounted time" -ne $idZero}} 

$msaArray | export-csv c:\billing\msa.csv -notypeinformation 
$laborArray | export-csv c:\billing\labor.csv -notypeinformation 

我已经尝试了所有不同的逻辑运算符的不相等,它只是似乎忽略的那部分。如果事情看起来不正确,我还有更多的代码。

我错过了什么,并预先感谢您的帮助!

回答

0

如果我理解这是正确的,你想在$ msaArray,其中$ billingList包含存在于$ msaClients,但其对应的占时不应该(在这种情况下0)是eual至$ idzero customerIDs

PS C:\> $msaArray = ($billingList | where {(($msaclients -contains $_.customerid)) -and ($_.'accounted time' -ne $idzero)}) 
PS C:\> $msaArray | ft -auto 

Number Ticket   Title   Customer User CustomerID Accounted time Billing 
------ ------   -----   ------------- ---------- -------------- ------- 
1  2014041710000096 Calendar issues george.jetson Widget, Inc 0.25   Labor 

而对于$ laborArray,其中$ billingList不包含存在于$ msaClients及其相应的占时不应该(在这种情况下0)是eual到idzero $以及customerIDs

PS C:\> $laborArray = ($billingList | where {(!($msaclients -contains $_.customerid)) -and ($_.'accounted time' -ne $idZero)}) 
PS C:\> $laborArray | ft -auto 

Number Ticket   Title      Customer User CustomerID  Accounted time Billing 
------ ------   -----      ------------- ----------  -------------- ------- 
2  2014041710000087 Redirected Folder permission jane.smith Mars Bars, Inc. 1    Labor 

你-ne操作员正在工作,但是你在$ msaclients中循环了太多次以获得$ laborArray.i.e,当$ msa =“Widget,Inc”时,你得到了“Mars Bars,Inc.”作为输出,但foreach循环再次运行,$ msa值更改为“Johns Company”,在这种情况下,您获得了“Mars Bars,Inc.”和“Widget,Inc”作为输出。因此,你最终有三个输出。

+0

你绝对摇滚,非常感谢你! – user3550556

+0

很高兴我能帮忙:) – Nitesh