如果数组中的元素与值PowerShell匹配,则删除它们

时间:2014-04-02 16:16:20

标签: arrays powershell

我正在解析文本文件中的一堆数据。我使用Get-Content获取数据。 然后我遍历$data中的每一行。拆分空间上的每一行并将这些值加载到数组中。

然后我循环遍历数组中的每个$string

如果$string匹配特定值,我想将其从数组中删除。

$index.Delete(), $index.Remove()不起作用,这就是我所拥有的。

$data = Get-Content "C:\Users\$userName\Desktop\test-data.txt"

foreach($row in $data){
    if($row)
    {
        [Array]$index = $row.Split(" ")

        $i = 0 
        foreach($string in $index){

            Write-Host $string 

            if($string -eq "value1" -or $string -eq "value2" -or $string -eq "value3")
            {
                $index.Delete() //This does not work. 
            }
        }

我也尝试了类似的东西,但它根本没有用完。

for($i -eq $index.length; $i -le 0; $i++)
{
    Write-Host $index[$i]  #this would hit once then give me an error saying the value is null 

    if($index[$i] -eq "value1" -or $index[$i] -eq "value2" -or $index[$i] -eq "value3")
     {
         $index.Remove()  #does not hit here at all/nor will it work. 
         Write-Host $index
     }
}

如何从$index数组中删除某些内容?

有更好的方法吗?

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:5)

最简单的方法是连锁经营者:

[Array]$index = $row.Split(" ") -ne $value1 -ne $value2 -ne $value3

每个元素都将删除数组中与变量中的值匹配的所有元素,结果将传递给下一个元素。完成后,数组将包含与任何$ value变量匹配的元素。

答案 1 :(得分:-1)

试试这个:

[array]$index = $row.Split(" ",[stringSplitOptions]::RemoveEmptyEntries) -notmatch "\b(?:$value1|$value2|$value3)\b"