foreach循环上的PowerShell + =添加重复的实例

问题描述 投票:0回答:5

我正在对一个由CSV填充的数组使用foreach循环。 CSV包含产品名称,当前支持状态以及支持开始时的版本号的行。有时出于各种原因,这些支持版本以逗号分隔。

当在一行中找到逗号分隔的版本时,该行将从数组中删除。然后创建一个新行,并将其添加到找到的每个版本的数组中。

我遇到的问题是,如果我的版本为“ 7,8,9”,我最终会列出所有列出版本9的三行。对该脚本进行故障排除表明,这些值已被正确拆分和拾取,但是数组似乎正在用最新的值更新每个值。例如,第一遍将创建版本7,第二遍具有两个v8实例,最后一遍以v9结束3次。

如何使+ =运算符不更新现有行?

foreach($ sheet中的$ line){if($ line.'Support Started'-cmatch“,”){$ sheet = $ sheet -ne $ line$ line.'Support Started'.Split(“,”)|每次{$ subver = $ _$ line.'Support Started'= $ subver$ sheet = $ sheet + =($ line)}}}

如果要使用以下内容,请提供更多信息:

写主机$ line$ sheet + = $ line写主机$ line

在版本为7,8,9的文件上,我得到以下输出:

产品1,支持,7产品1,支持,7产品1,支持,8产品1,支持,8产品1,支持,9产品1,支持,9

[检查$ sheet的值时,我得到:

产品1,支持,9产品1,支持,9产品1,支持,9

arrays powershell
5个回答
1
投票

确定您没有使用Import-Csv读取文件吗?

您遇到问题的原因是,当您这样做时>

foreach ($line in $sheet)
...

然后,变量$ line不是$ sheet中该行的副本,而是对sheet变量中该行的引用。即当您更改$ line时,实际上是在更改$ sheet。

我将尝试在操作数据时不更改$ sheet,而是创建一个可以容纳所有数据的新数组。像这样的东西:

$sheet = Import-Csv data.csv

$newsheet = @()
foreach ($line in $sheet)
{
    if ($line.'Support Started' -cmatch ",") 
    {
        $a = $line.'Support Started'.Split(",")
        ForEach ($subver in $a)
        {
            $line2 = $line.PSObject.Copy()
            $line2.'Support Started' = $subver
            $newsheet += $line2
        }
    } else {
        $newsheet += $line
    }
}

0
投票

$sheet = $sheet += ($line)


0
投票

未测试:


0
投票

您的电话


0
投票

从文本文件读取时,我遇到了foreach与write-host复制输出的问题,该问题已归结为正被读取的文件中的行返回,这被视为foreach针对其输出写入主机的有效条目

© www.soinside.com 2019 - 2024. All rights reserved.