2

我在 PowerShell 脚本中有一个简单的部分,它遍历列表中的每个数组并获取数据(在当前数组的 [3] 中找到),使用它来确定数组的另一部分(在 [0] 中找到)应添加到字符串的末尾。

$String = "There is"

$Objects | Foreach-Object{
if ($_[3] -match "YES")
    {$String += ", a " + $_[0]}
}

这工作得很好,花花公子,导致$String类似

"There is, a car, a airplane, a truck"

但不幸的是,这对于我想要的东西在语法上并没有什么意义。我知道我可以在创建字符串后修复它,或者在 foreach/if 语句中包含确定要添加哪些字符的行。这需要是:

  • $String += " a " + $_[0]- 第一场比赛。
  • $String += ", a " + $_[0]- 用于以下比赛。
  • $String += " and a " + $_[0] + " here."- 最后一场比赛。

此外,我需要确定是否使用“a”如果$_[0]以辅音开头,或者“an”如果$_[0]以元音开头。总而言之,我希望输出是

"There is a car, an airplane and a truck here."

谢谢!

4

1 回答 1

2

尝试这样的事情:

$vehicles = $Objects | ? { $_[3] -match 'yes' } | % { $_[0] }

$String = 'There is'
for ($i = 0; $i -lt $vehicles.Length; $i++) {
  switch ($i) {
    0                    { $String += ' a' }
    ($vehicles.Length-1) { $String += ' and a' }
    default              { $String += ', a' }
  }
  if ($vehicles[$i] -match '^[aeiou]') { $String += 'n' }
  $String += ' ' + $vehicles[$i]
}
$String += ' here.'
于 2013-09-25T19:26:53.627 回答