使用来自.csv的标题创建记录

vaj7vani  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(134)

〈编辑:我可以使用它,但是为了让它工作,我的模板csv必须有一个空行,我将添加到它的每一行。所以,如果我能弄清楚如何添加行到导入的空(只是一个标题行)csv文件,我可以在最后使用export-csv。(这会有点慢,但至少它会工作。)〉
我正在PowerShell中创建一个.csv文件。输出文件有140列。其中许多列为空。
我开始只是做

$out = 'S-'+$Snum+',,,,,TRUE,,,,,'+'S-'+$Snum+',"'
    $out = $out + '{0:d9}' -f $item.SupplierCode2

直到我用正确的值填充了所有列。但是,阅读输出的系统不断地更改列的位置。因此,我想从系统的模板中获取标题行,并使用它来命名列。这样,如果列更改了位置,也不会有什么影响,因为我将通过名称来引用它。
因为有太多的栏,所以我尽量避免输入所有栏名称的解决方案。只要使用只包含标题的空白.csv档案,只要它变更,我就可以将标题贴到csv档案中,而不需要变更程式码。
所以,我开始阅读我的csv文件,这样我就可以使用标题。

$TempA = Import-Csv -Path $Pathta -Encoding Default

然后我希望我能做这样的事情:

$TempA.'Supplier Key' = "S-$Snum"
$TempA.'Auto Complete' = "TRUE"
$TempA.'Supplier ID' = "S-$Snum"
$tempA.'Supplier Data - Supplier Reference ID' = '{0:d9}' -f $item.SupplierCode2

我只需要填写有值的字段,其他的都是空的。然后我想我可以把这个记录写到一个文件中。我以前写的是这样的

$writer2.WriteLine($out)

我想写新csv行中的行

$writer2.WriteLine($TempA)

如果可以的话,我宁愿使用流,因为文件很大,使用添加内容确实会减慢速度。
我知道我需要做一些事情来添加一行到$TempA,我希望每个循环都以新行开始(所有值都为空),因为有时某些行只填充了值的一个小子集。
很明显,我没有采取正确的方法。我真的很感激任何人能给予我任何建议。

  • 谢谢-谢谢
bprjcwpo

bprjcwpo1#

如果你只想填写某些字段,并且不介意使用Export-Csv,你可以使用-append-force开关,这样会把属性放在正确的位置。例如,如果你有一个模板CSV文件,里面只有列名,你可以这样做:

$Output = ForEach($item in $allItems){
    [PSCustomObject]@{
        'Supplier Key' = "S-$Snum"
        'Auto Complete' = "TRUE"
        'Supplier ID' = "S-$Snum"
        'Supplier Data - Supplier Reference ID' = '{0:d9}' -f $item.SupplierCode2
    }
}
$Output | Export-Csv -Path $Pathta -Append -Force

这将创建只包含您感兴趣的四个属性的对象,然后将它们输出到CSV中的正确列中,并根据需要添加逗号,以便为所有其他列创建空白值。

相关问题