Привет, я только что запустил powershell, и я работаю со сценарием powershell, который должен перебирать большой файл, содержащий строки, такие как "ABCD#######";"####";"@@";## ;"@@";####;#####;"@";. Что мне нужно сделать в powershell, так это перебрать этот файл, который может содержать более 20 000 строк, и взять часть информации из каждой строки и вывести ее в другой файл. У меня это работает, проблема в том, что это очень медленно, и мне было интересно, может ли кто-нибудь помочь, вот мой код.
foreach ($fileName in (ls i.gft1* | %{$_.name})){
$fileNo=1
$STUFFCount=0
cd work
new-item flttemp$fileNo -type file -force
cat $fileName | %{$_.replace('"','')} > temp
foreach ($line in (cat temp)){
echo $containerCount
if ($STUFFCount -eq 999)
{
$fileNo=$fileNo+1
$STUFFCount=0
break;
new-item flttemp$fileNo -type file
}
add-content flttemp$fileNo "STUFF_START" -encoding utf8
add-content flttemp$fileNo "STUFF"-encoding utf8
$no=$line.split(";")[0]
if ($line.substring("3","1") -eq "U")
{
add-content flttemp$fileNo "STUFF_TYPE:STUFF" -encoding utf8
}
else
{
add-content flttemp$fileNo "STUFF_TYPE:STUFF" -encoding utf8
}
add-content flttemp$fileNo "STUFF_NO:$no" -encoding utf8
add-content flttemp$fileNo "STUFF_NOTO:$no" -encoding utf8
$ISO=$line.split(";")[1]
add-content flttemp$fileNo "STUFF_ISO:$ISO" -encoding utf8
$weight=$line.split(";")[5]
if ($weight -gt 0)
{
$weight=2.20462 * $weight
$weight=$weight.tostring("#.##")
add-content flttemp$fileNo "STUFF_WGT:$weight" -encoding utf8
}
else
{
add-content flttemp$fileNo "STUFF_WGT:" -encoding utf8
}
$weight=$line.split(";")[6]
if ($weight -gt 0)
{
$weight=2.20462 * $weight
$weight=$weight.tostring("#.##")
add-content flttemp$fileNo "STUFF_MWGT:$weight" -encoding utf8
}
else
{
add-content flttemp$fileNo "STUFF_MWGT:" -encoding utf8
}
add-content flttemp$fileNo "}STUFF_END" -encoding utf8
$STUFFCount=$STUFFCount+1
}
}
Код работает (если редактирование ничего не пропустило), просто версия kornshell завершает создание файлов flttemp$fileNo за 1 минуту, в то время как для powershell требуется 4-5 минут, что слишком медленно для того, сколько файлов нужно этому сценарию. пройти через. Мой вопрос снова: есть ли способ, который я не использую для оптимизации powershell для более быстрого чтения файлов.