【问题标题】:Replace spaces with tabs用制表符替换空格
【发布时间】:2020-03-11 17:20:36
【问题描述】:

我有一些文本内容,想以更友好的方式拆分,然后导出为 CSV 格式。我想用制表符替换前几个空格。我尝试了一些正则表达式模式\s,但它拆分了所有文本。

您可能会看到示例数据和我的结果

【问题讨论】:

  • 你说的第一个空格是什么?请编辑您的问题并将您拥有的文本添加为​​格式化文本,而不是图像链接。同时提供所需输出的样本。
  • 一行中第一个连续的空格,可以使用-replace '(?<=^\S+)\s+',"`t"

标签: regex powershell split


【解决方案1】:

这应该可以解决问题:

$sourceFilePath  = 'c:\infile.txt'
$destFilePath    = 'c:\outfile.txt'

$writeHandle     = [System.IO.File]::OpenWrite( $destFilePath )

foreach($line in [System.IO.File]::ReadLines($sourceFilePath))
{
    $outbuf = [byte[]][char[]](($line -replace '^(.*?) (.*?) (.*?) (.*?) (.*)$', '$1*$2*$3*$4*$5').Replace("*", "`t") + [environment]::NewLine)
    [void]$writeHandle.Write( $outbuf, 0, $outbuf.Length )
}

[void]$writeHandle.Close()

【讨论】:

  • 是的,这对我有用 - 替换 '^(.*?) (.*?) (.*?) (.*?)', '$1*$2*$3*$4'。替换("*", "`t") 谢谢
【解决方案2】:

你可以使用这样的东西

$inputtext = Get-Content 'EQ-Input.txt'
$outputobject = foreach ($Line in $inputtext) {
    $arr = $line -split ' '
    [pscustomobject]@{
        Date = $arr[0]
        Time = $arr[1]
        Code = $arr[2]
        Result = $arr[3..($arr.Length-1)] -join ' '
    }
}

然后您可以使用$outputobject 进行进一步分析,也可以将其转换或保存为 CSV。

$outputobject | ConvertTo-Csv
$outputobject | Export-Csv -Path 'EQ-Output.csv'

【讨论】:

  • Igor Result 数组没有很好地解析得到第一个单词
  • 不要再次加入结果,而是使用<max-substrings> 参数:-Split ' ',4,它将简单地将数组的其余部分放入$arr[3]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2011-10-05
相关资源
最近更新 更多