Цель сценария (PowerShell) состоит в том, чтобы взять текстовый файл с разделителями табуляции, удалить строку заголовка, изменить разделитель на «+», добавить пользовательскую запись заголовка и добавить итоговую (нижний колонтитул) строку в нижней частифайл с подсчетом количества записей данных.Наконец, расширение файла необходимо заменить на порядковый номер.
Когда необработанный файл содержит более 1 строки, результат соответствует требуемому, но когда только одна строка (заголовок плюс 1 строка данных), выводфайл пуст.
$dir = "C:\Temp\Data"
$file = "rand1"
$sequencefile = "C:\temp\Sequential\DoNotDeleteSequence.txt"
$sequencenumber = (Get-Content $sequencefile)
$newsequencenumber = ($sequencenumber/1) + 1
Clear-Content $sequencefile
Add-Content $sequencefile $newsequencenumber
$backslash = "\"
$ext = ".txt"
$filename = $dir + $backslash + $file + $ext
$text = "TRAILER = "
$dateText = Get-Date -Format d
$Header1 = "HEADER="
$Header2 = "+PSTG"
$HeaderText = $Header1 + $dateText + $Header2
$tempfile1 = "step1"
$tempfile2 = "step2"
$tempfile3 = "step3"
$tempfile4 = "step4"
$temppstg = "PSTG_NCDLPSTG."
$stepfile1 = $dir + $backslash + $tempfile1 + $ext
$stepfile2 = $dir + $backslash + $tempfile2 + $ext
$stepfile3 = $dir + $backslash + $tempfile3 + $ext
$stepfile4 = $dir + $backslash + $tempfile4 + $ext
$pstgfile = $dir + $backslash + $temppstg + $newsequencenumber
(Get-Content $filename).Replace("+", '') | Set-Content $stepfile1
(Get-Content $stepfile1) | select -Skip 1 | Set-Content $stepfile2
Import-Csv $stepfile2 -Delimiter "`t" | Export-Csv $stepfile3 -Delimiter "+" -NoTypeInformation
Set-Content $stepfile4 $HeaderText
(Get-Content $stepfile3).Replace("""", '') | Add-Content $stepfile4
$records = Import-Csv $stepfile4 | Measure-Object | Select-Object -Expand Count
$textToWrite = $text + $records
Add-Content $stepfile4 $textToWrite
Rename-Item $stepfile4 $pstgfile
Я создал 2 тестовых необработанных файла (с разделителями табуляции).
C:\Temp\Data\rand1.txt
, содержащих
Header Row
Record1 Data1
C:\Temp\Data\rand2.txt
, содержащих
Header Row
Record1 Data1
Record2 Data2
Когда через код передается rand2.txt
, результат будет
HEADER=25/03/2019+PSTG
Record1+Data1
Record2+Data2
TRAILER = 2
Когда обрабатывается rand1.txt
, результат равен
HEADER=25/03/2019+PSTG
TRAILER = 0