0

我必须导入一个csv文件,我想直接在foreach中放置一个条件。我是说 :

要阅读 csv,我会这样做(是的,我的分隔符是 \ ):

$csv = Import-Csv -Delimiter \ -Path $mypath -Header 'column1', 'column2', 'column3'

然后我做:

foreach($line in $csv)
{
#Actions
}

我想做什么,但我不知道是否有可能:

for($i =1; $i -lt $myarray.Length; $i++)
{
   foreach($line in $csv) | Where $line.column2 -eq $myarray[$i]
   {
      #Actions only if $line.column2 is equal to $myarray[$i]
   }
}

所以我得到了一个数组,里面有名字。而且我想做#Actions,只有当csv中的一列与我的数组中的信息匹配时。如果没有,我想在 $csv 中更改 $line。

我写的这个想法看起来很沉重,我认为有更好更快(更难更强大#DaftPunk)的方法来做到这一点。

如果有人以前已经使用过这个,请告诉我:)

提前致谢,

尼科。

PS:我为我的英语道歉;)

编辑:我刚刚意识到我可以做一个 if 条件:

for($i =1; $i -lt $myarray.Length; $i++)
{
   foreach($line in $csv)
   {
      if($line.column2 -eq $myarray[$i]
      {
         #Actions
      }
   }
}

但我仍然认为:| #Conditions 在哪里更好...

4

1 回答 1

1

您可以在循环内使用 IF,这是一种通用方法

Import-Csv ... | Foreach-Object{

   if(something)
   {
      #do something with the current object and write it back to the pipeline
      $_ = ...
      $_
   }
   else
   {
      # write the object back to the pipeline
      $_
   }
}
于 2013-06-28T08:59:31.390 回答