$m_point = Select-String -pattern ",T," c:\temp\test\mt_point.txt
For ($x=0; $x -le $m_point.length; $x++)
#For ($x=0; $x -le 2; $x++)
{
$s_point = $m_point[$x] -split ","
$s_point = $s_point -replace ''''
# echo $s_point[10]
$point_ID=$s_point[2]+"."+$s_point[3]+"."+$s_point[4]+"."+$s_point[5]
# echo $point_ID
$Sel = Select-String -pattern $point_ID -path $Location
$tp_point_stirng= $Sel-split ";"
# echo $tp_point_stirng[6]
# echo $tp_point_stirng[7]
$tp_point_no=$tp_point_stirng[0]-split ":"
$tp_point=$tp_point_no[3]-split ","
#echo $tp_point[1]
if($point_ID -eq $tp_point_stirng[1])
{
if($s_point[6]-eq "T")
{
$Nis_point="!1!"+$tp_point[1]+"!"+$s_point[2]+ "!"+$tp_point_stirng[7]+"!0!SI!!"+$s_point[7]+"!!!!"+ $s_point[8]+"!"
$Nis_point | out-file -filepath $fname_tag -Append
}
if($s_point[9]-eq "T")
{
$Nis_point="!1!"+$tp_point[1]+"!"+$s_point[2]+ "!"+$tp_point_stirng[7]+"!2!AI!!"+$s_point[10]+"!!!!"+ $s_point[11]+"!"
$Nis_point | out-file -filepath $fname_tag -Append
}
if($s_point[12] -eq "T" -or $s_point[13] -eq "T")
{
if($s_point[14] -eq "F" -or $s_point[15] -eq "F")
{
$SDID_XDIS= "1"+","+$tp_point[1]+",0"
$SDID_XDIS | out-file -filepath $fname_mu -Append
}
if($s_point[14] -eq "T" -or $s_point[15] -eq "F")
{
$SDID_XDIS="1"+","+$tp_point[1]+",1"
$SDID_XDIS | out-file -filepath $fname_mu -Append
}
if($s_point[14] -eq "F" -or $s_point[15] -eq "F")
{
$SDID_XDIS= "1"+","+$tp_point[1]+",2"
$SDID_XDIS | out-file -filepath $fname_mu -Append
}
if($s_point[14] -eq "T" -or $s_point[15] -eq "T")
{
$SDID_XDIS= "1"+","+$tp_point[1]+",3"
$SDID_XDIS | out-file -filepath $fname_mu -Append
}
}
}
}
首先程序读取大约80000行数据,拆分行。
拆分对象,搜索文件,然后拆分对象,
搜索文件使用:$ Sel = Select-String -pattern $ point_ID -path $ Location
写文件:$ SDID_XDIS | out-file -filepath $ fname_mu -Append
完成写文本文件约1小时,非常慢。
我该怎么办?任何其他更快完成程序
答案 0 :(得分:0)
使用Measure-Command
查找哪些语句占用的时间最长。
话虽如此,代码包含两个明显的瓶颈。使用Select-String
读取大文件将会表现不佳。请考虑使用ReadLine()
中的System.IO.File
。使用Add-Content
逐行写入文件是另一个性能杀手。相反,请使用缓冲输出,例如来自StringBuilder
的{{1}}。
System.Text
的解析例程可能需要重写。考虑您多次检查相同的条件:
$SDID_XDIS