【问题标题】:Adding text to existing csv file's rows using PowerShell使用 PowerShell 将文本添加到现有 csv 文件的行
【发布时间】:2021-03-10 12:21:12
【问题描述】:

我想将 csv 文件中的文本 ;12345 添加到 VAT Number 列中包含 DE123456789 的每一行。

例子:

header1; header2; header3; header4; header5; VAT Number; header7; Kundennummer
AB; 12345; AB123456789; 10.03.2021; GT; DE123456789; EUR
CD; 456789; 22.24; Text; SW;
AB; 12345; AB123456789; 10.03.2021; GT; DE123456789; EUR

我想要的保存文件是

header1; header2; header3; header4; header5; VAT Number; header7; Kundennummer
AB; 12345; AB123456789; 10.03.2021; GT; DE123456789; EUR; 12345
CD; 456789; 22.24; Text; SW;
AB; 12345; AB123456789; 10.03.2021; GT; DE123456789; EUR; 12345

我的尝试是这样的:

$File = 'S:\Test\test.csv'
$Check = (Import-Csv $File)."VAT Number" | ForEach-Object {
    if ($Check -Contains "DE123456789") {
        Select-Object @{Name='Kundennummer';Expression={'12345'}} | 
        Export-Csv $File -NoTypeInformation
    }
}

但文件根本没有发生任何事情。

我在一个有人问过类似问题的论坛中找到了这段代码。但是没有反馈。

【问题讨论】:

  • 您知道您的 CSV 文件缺少CD 行中的一列,不是吗?另外,您的问题是关于在文件中添加一个没有标题的新列..
  • @Theo 关于列名,您是对的。因为我现在正在准备这个文件,所以我在文件中添加了一个额外的列(并且刚刚将它编辑到 qeustion)。以 CD 开头的行实际上更短。他们的列更少。我知道这很奇怪——这就是所提供的文件和数据的样子。这与我 1 小时前的另一个问题直接相关,该问题还没有解决。

标签: powershell insert contains import-csv


【解决方案1】:

好的,既然你已经为文件提供了足够的标题,这可能对你有用:

$csv = Import-Csv -Path 'D:\Test\TheInputFile.csv' -Delimiter ';'
# get an array of the column headers
$allHeaders = $csv[0].PsObject.Properties.Name
$data = foreach ($item in $csv) {
    if ($item.'VAT Number' -eq 'DE123456789') { $item.Kundennummer = 12345 }
    # output a new object making sure all fields are present (allbeit some will remain empty)
    $item | Select-Object $allHeaders
}

$data | Export-Csv -Path 'D:\Test\TheNewFile.csv' -Delimiter ';' -NoTypeInformation

【讨论】:

  • 像魅力一样工作。非常感谢你。现在只剩下我在另一个问题中提到的分裂了。
  • @Nerevar.de 看看,我刚刚在那个帖子上发布了一个答案;)
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2014-02-12
  • 2021-07-10
  • 1970-01-01
  • 2017-03-06
  • 2014-05-03
相关资源
最近更新 更多