PowerShell中的手动格式

问题描述 投票:1回答:2

我陷在这种情况下。我有一个文本文件,其中有很多行是这样的:

123450,ADN,,2785,"1,576,000,000.06",TEXT TEST TEXT,,
999999,NSU,,1234,"-1,576,000,000.06",TEXT TEST TEXT TEST,,
790834,CHI,,5678,"2,345,000,000.01","TEXT TEST (TEXT), TEST",,
893472,JAP,,0123,"-2,345,000,000.01","TILL THERE (ALMOST), UH",,
093289,CRU,,6489,"424,000,000.00",TEST TEXT UB,,

而且我需要进行格式化才能看到如下结果:

  • 第一个位置必须有14个字符,前导零(固定宽度)
  • 第二个位置需要将3个字母+ 4个数字加前导零(固定宽度为12个字符)
  • 打印+分隔符号
  • 然后没有,."的值(固定宽度的18个字符)以及不含,."的文本:

    00000000123450ADN000002785+000000157600000006TEXT TEST TEXT
    00000000230634NSU000001234+000000157600000006TEXT TEST TEXT TEST
    00000000232014CHI000005678+000000234500000001TEXT TEST (TEXT) TEST
    00000000230634JAP000000123+000000234500000001TILL THERE (ALMOST) UH
    00000000232015CRU000006489+000000042400000000TEST TEXT UB
    

我正在尝试使用Format-Table来执行此操作,但是我无法操纵和指定前导零和固定宽度。我该怎么办?

powershell manual
2个回答
1
投票

我会尝试这样的事情(用您自己的文件路径替换):

Format-Table

输出间距的关键是使用padleft并替换不需要的字符。


1
投票

您以与构建任何复杂的格式化字符串相同的方式对其进行格式化:一次输入一个字段。 PowerShell可以通过$infile = Import-Csv "C:\Temp\input.txt" -Delimiter "," -Header 1,2,3,4,5,6,7,8 $outfile = "C:\Temp\output.txt" if(Test-Path $outfile){ Remove-Item $outfile } #remove any existing output files foreach($line in $infile) #loop through lines { $outline = "" #empty output line $outline = ($line.1).PadLeft(14,"0") + $line.2 + ($line.4).PadLeft(12,"0") + "+" + ($line.5).Replace(",","").Replace(".","").Replace("-","").PadLeft(18,"0") + ($line.6).Replace(",","").Replace(".","") $outline | Out-File $outfile -Append #write to output file } 运算符使用.NET字符串格式说明符。

-f之类的标准格式说明符可以格式化数字字段(一旦将其转换为{N:DX})。我们首先在文本字段上进行一些字符串处理。

[int]

您未在问题中指定如何将数据读取到PowerShell中。显然,如果您已经将CSV导入到PowerShell变量中,则应该使用自己的字段。

© www.soinside.com 2019 - 2024. All rights reserved.