【问题标题】:Read line-by-line file and split values逐行读取文件并拆分值
【发布时间】:2013-09-08 02:41:59
【问题描述】:

我需要读取如下组成的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 或获取它方面存在一些问题。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:
    # 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 语句的数组)

    【讨论】:

    • 你能更好地解释一下“%”的含义吗?
    • %{ ... } 是“foreach”的快捷方式。编辑答案以使用 foreach 提供等效代码。
    【解决方案2】:

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

    (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

    【讨论】:

      【解决方案3】:

      其他解决方案:

      Get-Content "c:\temp\test.txt" | ConvertFrom-String -Delimiter "#" -PropertyNames Part1, Part2
      

      【讨论】:

        猜你喜欢
        • 2019-05-14
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-03
        • 1970-01-01
        相关资源
        最近更新 更多