我遇到了这种情况,有一个文本文件,显示如下所示的许多行:
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但不能操作并指定前导零和固定宽度。有谁知道如何格式化它?
答案 0 :(得分:1)
我会尝试这样的事情(用你自己的文件路径替换):
$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
}
输出间距的关键是使用padleft并替换您不想要的字符。
答案 1 :(得分:1)
您格式化它的方式与构建任何复杂格式化字符串的方式相同:一次一个字段。 PowerShell可以使用带有 Dim XMLpath As String = "C:\temp\CR.SyncClient.exe.config"
Dim SyncToken As String = Nothing
Dim xml = XDocument.Load(XMLpath)
TextBox1.Text = xml.Document.<applicationSettings>.<CR.Properties.Settings>.Elements("SyncServiceToken").Value
运算符的.NET字符串格式说明符。
标准格式说明符(例如-f
)可以格式化数字字段(一旦转换为{N:DX}
)。我们首先对文本字段进行一些字符串处理。
[int]
您没有在问题中指定如何将数据读入PowerShell。显然,如果您已将CSV导入PowerShell变量,则应使用自己的字段。