我陷在这种情况下。我有一个文本文件,其中有很多行是这样的:
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,,
而且我需要进行格式化才能看到如下结果:
然后没有,
,.
和"
的值(固定宽度的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
来执行此操作,但是我无法操纵和指定前导零和固定宽度。我该怎么办?
我会尝试这样的事情(用您自己的文件路径替换):
Format-Table
输出间距的关键是使用padleft并替换不需要的字符。
您以与构建任何复杂的格式化字符串相同的方式对其进行格式化:一次输入一个字段。 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变量中,则应该使用自己的字段。