【发布时间】:2017-05-09 19:38:03
【问题描述】:
所以我有这个输入文件(没有文件扩展名):
0 1 2 3 4 5 ###6#### _7______ 8 9 0 1 2 3 ###4##__
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
0202XXXX TESTS1 XX DRN CODE123 010TESTS 0000000001481500000014832000000148150000001481700000014832+
0202XXXX TESTS1 TEST11 DRN CODE123 010TESTS 0000000000336400000003364000000033640000000336400000003364+
0202XXXX TESTS1 XXX YYYYYY PN N2 CODE123 010TESTS 0000000000118500000001206000000011600000000118300000001205+
0202XXXX TESTS1 ZZZZZZZZZ DRN CODE123 010TESTS 0000000004188300000041883000000412400000004156200000041240+
0202XXXX TESTS1 PPP MKLRTR PN CODE123 010TESTS 0000000000000000000000000000000000000000000000000000000000/
0202XXXX TESTS1 GGG TEST ON ED CODE123 010TESTS 0000000000095000000001024000000009500000000098700000001024-
我想从那里获取三个值并打印在具有特定格式的新文件上。
我正在尝试使用 substring 选项,但我无法在输出文件中看到预期的结果,那么这段代码可能有什么问题?
我希望看到的输出为:
1 2 3 4 5
1234567890123456789012345678901234567890123456789012345
CODE123 17.98
CODE12 2.37
CODE 2.70
CODE12 2.73
CODE123 13.39
但是使用下面的代码,我得到的结果没有列。一行代码都搞砸了。
$InputFile = D:\Test\inputfile.txt
$outFile = D:\Test\outfile.txt
$Pattern = "010TESTS"
$spaces1 = " ";
$spaces2 = " ";
$dot = "."
$rec = 0
(gc $InputFile) | ? {$_.trim() -ne "" } | Select-String -pattern $Pattern -AllMatches | Set-Content $outFile
$file = gc $outFile
$Test = $file.Substring(69, 8) # This should give me the value 010TESTS
foreach ($line in $file) {
if ($Test -eq "010TESTS") {
$Value1 = $file.Substring(57, 8)
$Value2 = $file.Substring(137, 6).TrimStart('0') # To remove leading zeroes
$Value3 = $file.Substring(143, 2)
if (! ($Value1 -eq "" -and $Value2 -eq "00")) {
# Here I need the values on each line
$FinalFile += ($spaces1 + $Value1 + $spaces2 + $Value2 + $dot + $Value3).Split("`n")
}
}
}
$FinalFile | Set-Content $outFile
【问题讨论】:
-
$file(输入数组)和$File(输出字符串)是否应该是不同的变量? PowerShell 不区分大小写。 -
如果您需要固定格式的输出文件,我强烈建议您探索
-foperator -
另外,您只需在循环外设置一次
$Test。因为它的值在循环内永远不会改变,if()每次都采用相同的分支。 -
很好@Ryan Bemrose,刚刚修复了变量名称。嗯,会看看你提到的$Test,谢谢。
-
在创建输出文件时,您不能将
D:\Test作为输入文件,同时将D:\Test作为目录。
标签: powershell formatting output