Я работаю с данными, импортированными из CSV-файлов, в которых одна и та же информация отображается в другом месте.Я пытаюсь сгруппировать одну и ту же информацию, чтобы избежать построчной обработки файла, но я пока не нашел, возможно ли использовать команду group-object для уже сгруппированного набора данных.
Я быхотелось бы иметь возможность изолировать каждую уникальную «компанию» и «IdComp», затем каждый уникальный контракт и, наконец, иметь возможность читать каждый код и выполнять действия с каждым кодом и генерировать XML-файл в качестве вывода.У меня есть выделенная структура данных для примера, и XML не упоминается.Однако в качестве вывода на консоль я хотел бы иметь возможность получить следующую структуру
Company(ie : AZ Corp)
===> Contract (ie : 555)
========> Code (ie : ZA)
========> Code (ie : TX)
...(next company)
Мой тестовый код
$csv = import-csv “input.txt” –delimiter ';'
$comp = $csv | Group-Object -Property "company"
ForEach($company in $comp) {
Write-Output $company.Name
ForEach($cont in $company) {
Write-Output $cont.Group.contract
}
}
Мой пример XML выглядит так:
company;idcomp;contract;code
AZ corp;100;555;ZA
AZ corp;100;555;TX
AZ corp;100;567;GT
AZ corp;100;567;HY
AZ corp;100;567;KL
WX corp;109;555;TX
WX corp;109;555;JU
WX corp;109;678;HG
Редактировать: мне наконец удалось сделать это с помощью этого кода:
$csv = import-csv “input.txt” –delimiter ';'
$comp = $csv | Group-Object -Property "company"
ForEach($company in $comp) {
Write-Host $company.Name
ForEach($cont in $company) {
$contracts = $cont.Group | Group-Object -Property "contract"
ForEach($contract in $contracts) {
Write-Host $contract.Name
ForEach($codedetail in $contract.Group) {
Write-Host $codedetail.code
}
}
}
}
Вывод:
AZ corp
555
ZA
TX
567
GT
HY
KL
WX corp
555
TX
JU
678
HG
Я не уверен, является ли это эффективным / более чистым способом сделатьЭто.Любой совет будет приветствоваться.