4

我需要阅读组成如下的txt文件:

      AA=1000,AA=320009#999999

      AA=1011,AA=320303#111111

对于每条已读的行,我需要用“#”将其拆分以在第一轮获得

 $test[0] = AA=1000,AA=320009 and $test[1]=999999

在第二回合

 $test[0] = AA=1000,AA=320003   $test[1]= 1111111

我有一些问题要了解如何使用 get-content 或获取它。

4

3 回答 3

7
# Basically, Get-Content will return you an array of strings such as below:
# $tests = Get-Content "c:\myfile\path\mytests.txt"

$tests = @(
    "AA=1000,AA=320009#999999",
    "AA=1011,AA=320303#111111"
)

$tests | %{ $test = $_ -split '#'; Write-Host $test[0]; Write-Host $test[1] }

上面的行相当于:

$tests | foreach {
  $test = $_ -split '#'
  Write-Host $test[0]
  Write-Host $test[1]
}

这意味着对于 $tests 的每一行(每一行都由 $_ 实现,一个在 '#' 上进行拆分(这会产生一个在 Write-Host 语句中使用的数组)

于 2013-09-04T14:37:07.003 回答
3

如果文本文件中的所有行都具有相同的结构,则可以-split直接在结果上使用运算符Get-Content

(Get-Content 'C:\path\to\your.txt') -split '#'

结果是一个数组,其中偶数索引 (0, 2, 4, ...) 包含行的第一部分,奇数索引 (1, 3, 5, ...) 包含行的最后部分。

例子:

PS C:\> Get-Content .\test.txt
AA=1000,AA=320009#999999
AA=1011,AA=320303#111111
PS C:\> $test = (Get-Content .\test.txt) -split '#'
PS C:\> $test[0]
AA=1000,AA=320009
PS C:\> $test[3]
111111
于 2013-09-04T17:12:00.470 回答
3

其他解决方案:

Get-Content "c:\temp\test.txt" | ConvertFrom-String -Delimiter "#" -PropertyNames Part1, Part2
于 2017-01-29T10:45:27.487 回答