我需要获取一个CSV文件,然后根据帐号创建不同格式的文件。我需要的帐号是在没有其他字段的其他文件中(我需要填写它们以匹配)。这只是下面的一个。
我知道我可以循环使用foreach,但试图避免这种情况。这没有错误,但即使我知道有匹配也不起作用。
$sms_accts = import-csv -path "H:\scrap\Positive Pay Feeds\sms_accounts.txt"
$input_file = import-csv -path "H:\scrap\Positive Pay Feeds\CNVDC939.POSITIVE PAY ISSUES.txt"
$sms_accts = $sms_accts | Select-Object @{Name="Acct";Expression={$_.Acct.PadLeft(11,"0")}}
$to_sms_file = $input_file | where-object { $sms_accts -contains ($_.ACCOUNT_NUMBER.PadLeft(11,"0")) }
$to_sms_file
它什么都不返回。
以下示例文件。
sms_accounts.txt:
Acct
12345678
23456789
Positive Pay:
"SPONSOR_BANK_ID","BE_CLIENT_ID","COMPANY_NAME","ACCOUNT_NUMBER","SERIAL","AMOUNT","PAYEE","ISSUE_TYPE","STATUS","ENTRY_DATE","ISSUE_DATE"
"100741","1004928","Acme","0012345678","11111","2468","","0","1","2/11/2014 5:50:34 PM","2/10/2014"
"100741","1004928","ABC","009999999","22222","180.34","","0","1","2/20/2014 9:01:38 PM","2/20/2014"
答案 0 :(得分:1)
您可以使用Acct
属性过滤$sms_accts
... | where-object { $sms_accts.Acct -contains ($_.ACCOUNT_NUMBER.PadLeft(11,"0"))}
通过这种方式,您无需在代码中使用foreach
。
答案 1 :(得分:0)
您使用单个属性$sms_accts
将Acct
处理为自定义对象数组:
$sms_accts = $sms_accts | Select-Object @{Name="Acct";Expression={$_.Acct.PadLeft(11,"0")}}
然后检查数组中是否有特定的字符串:
... | where-object { $sms_accts -contains ($_.ACCOUNT_NUMBER.PadLeft(11,"0")) }
由于您的自定义对象都不是字符串(即使每个字符串都有字符串属性),因此您无法获得匹配项。改变两行
$sms_accts = import-csv -path "H:\scrap\Positive Pay Feeds\sms_accounts.txt"
和
$sms_accts = $sms_accts | Select-Object @{Name="Acct";Expression={$_.Acct.PadLeft(11,"0")}}
进入这个:
$sms_accts = Import-Csv "H:\scrap\Positive Pay Feeds\sms_accounts.txt" | % {
$_.Acct.PadLeft(11,"0")
}
您的支票将按预期运作。