Если я правильно читаю, у вас есть несколько файлов, в каждом из которых есть одна запись данных, разделенных между удачно расположенными словами «НАЧАЛО» и «КОНЕЦ». Вы хотите, чтобы каждый файл был переведен в один файл CSV?
Я думаю, что приготовил что-то стоящее. Хотя я уверен, что он не идеален.
$Select = 'TYPE','DOB','DATE','TIME','TERMINAL','ORGTERM','EMPLOYEE'
ForEach( $InputFile in (Get-ChildItem $CurrentDirectory) )
{
$OutputFile = $InputFile.BaseName + '.csv'
$Table = Get-Content $InputFile
$TempHash = [Ordered]@{}
ForEach( $Column in $Table )
{
If( $Column -notmatch '(^BEGIN$|^END$)' )
{
$TempArr = $Column.Split( ' ', 2, [System.StringSplitOptions]::RemoveEmptyEntries ) | ForEach{$_.Trim()}
If( $Select -contains $TempArr[0] )
{
$TempHash.Add($TempArr[0], $TempArr[1] )
}
}
}
#Now $TempHash should have enough to create the object and export to CSV
[PSCustomObject]$TempHash | Export-Csv -Path $OutputFile -NoTypeInformation
}
Несколько моментов:
- Я игнорирую строки НАЧАЛО И КОНЕЦ
- Я манипулирую затем каждая строка в массиве, который по большей части должен состоять из 2 элементов.
- Если первый элемент [0] находится в коллекции файлов, которую вы ищете, я добавлю в качестве пары ключ / значение для га sh. В противном случае ничего не делать.
- После обработки строк Преобразовать объект в PSCustomObject и экспортировать в файл CSV.
- Я протестировал его только на одном файле, созданном по вашему вопросу. Я обернул внешний l oop как псевдокод.
Это работает, но вывод выглядит немного изменчиво, как числа, являющиеся строками и тому подобное. Тем не менее, я считаю, что в качестве версии у нас есть кое-что для работы.
Если вы неправильно прочитали свой комментарий и вам нужен один выходной CSV-файл, корректировка состоит в том, чтобы просто объявить имя файла перед l oop и используйте параметр append в командлете Export-CSV. Смотрите ниже, хотя я больше не проверял это:
$OutputFile = 'YourOutput.csv'
$Select = 'TYPE','DOB','DATE','TIME','TERMINAL','ORGTERM','EMPLOYEE'
ForEach( $InputFile in (Get-ChildItem $CurrentDirectory) )
{
$Table = Get-Content $InputFile
$TempHash = [Ordered]@{}
ForEach( $Column in $Table )
{
If( $Column -notmatch '(^BEGIN$|^END$)' )
{
$TempArr = $Column.Split( ' ', 2, [System.StringSplitOptions]::RemoveEmptyEntries ) | ForEach{$_.Trim()}
If( $Select -contains $TempArr[0] )
{
$TempHash.Add($TempArr[0], $TempArr[1] )
}
}
}
#Now $TempHash should have enough to create the object and export to CSV
[PSCustomObject]$TempHash | Export-Csv -Path $OutputFile -NoTypeInformation -Append
}
Извините за имена переменных, которые, очевидно, могли бы использовать рефакторинг ...
Дайте мне знать, что вы думаете.