1

这是交易,我正在浏览一个带有一些代码的 INI 文件。这个想法是使用正则表达式返回在 INI 文件中找到的所有类别,然后将 arraylist = 设置为结果。

所以这里是代码:

    switch -regex -file $Path
    {
        "^\[(.+)\]$" {
            $arraylist.Add($matches[1])
        }
    }

但是,该函数不仅返回类别,还返回类别的计数。例如,如果 INI 文件如下所示:

[Red]
[White]
[Blue]

输出是:

0
1
2
Red
White
Blue

我怎样才能解决这个问题?

4

3 回答 3

3

ArrayList.Add() 返回添加项目的索引。这就是你看到数字的原因。只需将该声明设为无效,例如:

[void]$arraylist.Add($matches[1])

或管道到 Out-Null

$arraylist.Add($matches[1]) | Out-Null
于 2009-11-06T20:20:52.530 回答
1

另外的选择:

$al = new-object System.Collections.ArrayList
$cat = switch -regex -file $env:WINDIR\system.ini { "^\[([^\]]+)\]$" { $_ -replace '\[|\]'}}
$al.AddRange($cat)
于 2009-11-09T09:04:31.763 回答
0

我正在尝试重现您看到的问题,但无法做到。这是我用来测试的代码的重新创建:

("[Red]","[White]","[Blue]") | Out-File Test.ini -Encoding ASCII
$Path = (get-item Test.ini)
$arraylist = new-object System.Collections.ArrayList
$matches = @()
switch -regex -file $Path {
    "^\[(.+)\]$" {
        $arraylist.Add($matches[1]) 
    }
}

$arrayList

执行此操作时,我得到以下输出:

Red   
White    
Blue

我是否缺少您的代码未显示的内容?

于 2009-11-06T20:11:38.513 回答