我有一个文本文件,看起来像下面的,其中包含一个表在第8行。现在,该表可以在长度上变化,但它总是包含4个值每行。
输入档案:
0001117945
14102022
0001056.98
GBP
0000000.00
0000000.00
\\GLORSAWA01\EHIShared\Remittance\UK01\UKI_REM_COL58652cbc13ca49aabf000.pdf
<LineItemTable><LINEITEM><LINEITEMFIELD>20220916</LINEITEMFIELD><LINEITEMFIELD>2525636 </LINEITEMFIELD><LINEITEMFIELD>0.00 </LINEITEMFIELD><LINEITEMFIELD>246.05 </LINEITEMFIELD></LINEITEM><LINEITEM><LINEITEMFIELD>20220920</LINEITEMFIELD><LINEITEMFIELD>2527541 </LINEITEMFIELD><LINEITEMFIELD>0.00 </LINEITEMFIELD><LINEITEMFIELD>450.12 </LINEITEMFIELD></LINEITEM><LINEITEM><LINEITEMFIELD>20220922</LINEITEMFIELD><LINEITEMFIELD>2531147 </LINEITEMFIELD><LINEITEMFIELD>0.00 </LINEITEMFIELD><LINEITEMFIELD>360.81 </LINEITEMFIELD></LINEITEM></LineItemTable>
第8行中的表结构始终相同,并且看起来与下面类似(格式化只是为了更好地查看)。
<LineItemTable>
<LINEITEM>
<LINEITEMFIELD>20220916</LINEITEMFIELD>
<LINEITEMFIELD>2525636 </LINEITEMFIELD>
<LINEITEMFIELD>0.00 </LINEITEMFIELD>
<LINEITEMFIELD>246.05 </LINEITEMFIELD>
</LINEITEM>
<LINEITEM>
<LINEITEMFIELD>20220920</LINEITEMFIELD>
<LINEITEMFIELD>2527541 </LINEITEMFIELD>
<LINEITEMFIELD>0.00 </LINEITEMFIELD>
<LINEITEMFIELD>450.12 </LINEITEMFIELD>
</LINEITEM>
<LINEITEM>
<LINEITEMFIELD>20220922</LINEITEMFIELD>
<LINEITEMFIELD>2531147 </LINEITEMFIELD>
<LINEITEMFIELD>0.00 </LINEITEMFIELD>
<LINEITEMFIELD>360.81 </LINEITEMFIELD>
</LINEITEM>
</LineItemTable>
我尝试从文本文件中提取所有值并将它们写入另一个文件,但我希望保留前7行,然后将第8行的值显示在多行中,并以分隔;没有白色。
所需的输出文件:
0001117945
14102022
0001056.98
GBP
0000000.00
0000000.00
\\GLORSAWA01\EHIShared\Remittance\UK01\UKI_REM_COL58652cbc13ca49aabf000.pdf
20220916;2525636;0.00;246.05
20220920;2527541;0.00;450.12
20220922;2531147;0.00;360.81
这是我走了多远,但我不能得到表从第8行转换成我想要的输出。任何帮助将不胜感激。
$importfolder = ".\PowerShell_script\"
$outputfolder = ".\PowerShell_script\Output\"
$files = ".\PowerShell script\*.txt"
$list = Get-ChildItem -Path $files | select Name
$find1 = "<LineItemTable><LINEITEM><LINEITEMFIELD>"
$find2 = "</LINEITEMFIELD><LINEITEMFIELD>"
$find3 = "</LINEITEMFIELD></LINEITEM><LINEITEM><LINEITEMFIELD>"
$replace1 = ""
$replace2 = "`t"
$replace3 = "`n"
ForEach($file in $list){
echo $file.Name
$filename = $file.Name
$file = $importfolder + $file.Name
$outputfile = $outputfolder + $filename
$filecontent = Get-Content $file |
ForEach-Object {
if($_ -Match $find1)
{$_ -replace $replace1}
if($_ -Match $find2)
{$_ -replace $replace2}
if($_ -Match $find3)
{$_ -replace $replace3}
else {$_} # output the line as is
} | Set-Content $outputfile
}
1条答案
按热度按时间von4xj4u1#
看起来此逻辑对于所讨论的示例文件工作正常:
基本上,保留所有行,直到倒数第二行,最后一行将其视为XML。
在您的循环中实作这个,程式码看起来会像这样: