Powershell手动格式化

时间:2016-06-27 20:56:09

标签: powershell manual

我遇到了这种情况,有一个文本文件,显示如下所示的许多行:

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但不能操作并指定前导零和固定宽度。有谁知道如何格式化它?

2 个答案:

答案 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变量,则应使用自己的字段。