〈编辑:我可以使用它,但是为了让它工作,我的模板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,我希望每个循环都以新行开始(所有值都为空),因为有时某些行只填充了值的一个小子集。
很明显,我没有采取正确的方法。我真的很感激任何人能给予我任何建议。
- 谢谢-谢谢
1条答案
按热度按时间bprjcwpo1#
如果你只想填写某些字段,并且不介意使用
Export-Csv
,你可以使用-append
和-force
开关,这样会把属性放在正确的位置。例如,如果你有一个模板CSV文件,里面只有列名,你可以这样做:这将创建只包含您感兴趣的四个属性的对象,然后将它们输出到CSV中的正确列中,并根据需要添加逗号,以便为所有其他列创建空白值。