PowerShell处理大型CSV非常慢 - 有更好的方法吗?

时间:2014-03-10 18:41:19

标签: powershell csv import

使用Powershell并正在进行foreach循环。循环中的一个步骤是在csv文件中找到匹配 -

import-csv ".\RateCard.csv" | where-object{$($Item.'From Number') -match "^\+?($($_.Destination))\w*$"}

foreach循环在一个月的时间段内处理大约100,000条记录,并在没有csv查找的情况下在几分钟内完成。添加csv查找后,我可以看到每次查找需要大约5-10秒。 csv文件有40,000行和大约10列。

虽然我知道客户端处理速度会变慢,而且我应该考虑使用SQL,但我想知道是否有更快的方法来执行此操作。我想过使用一个流阅读器,但无法弄清楚如何进行匹配查找。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

正如mjolinor建议的那样,将您的Import-CSV移到ForEach循环之外:

$RateCard = importcsv ".\ratecard.csv"
ForEach($Item in $Items){
    if($RateCard.Destination -contains $Item.'From Number'){
        Do Stuff
    }
}

我刚刚添加了一个If / Then函数来检查您的项目的起始编号是否在CSV的目标字段中找到。