尝试替换csv中的字符,然后将修改后的文件写入文件系统

时间:2015-02-24 15:07:09

标签: powershell

我在第11列中有一个csv,我想要替换它,然后将修改后的文件写入文件系统:

get-content .\BSEG_EXPORT.csv | % { $_.Split(",")[11] -replace "1", "@" } | out-file stuffs.csv

我希望stuffs.csv拥有输入文件,但所有1替换为@第11列。但是,它仅包含第11列。

我怎么做错了?

1 个答案:

答案 0 :(得分:0)

基本上,您的期望是不正确的。

get-content .\BSEG_EXPORT.csv | % { $_.Split(",")[11] -replace "1", "@" }

上面一行说:$_.Split(",")[11],这意味着获得第12列。无处选择所有列。从那里你正在进行替换,这就是你输出到输出文件的内容。在psuedo代码中,你已经说过“获取csv的内容。对于每一行,获取第12列,将”1“替换为”@“,输出替换值。”

你需要更多的东西:

get-content .\BSEG_EXPORT.csv | % { $sheet = $_.Split(","); $sheet[11] = $sheet[11] -replace "1", "@"; $_ } | out-file stuffs.csv

但是,如果您有任何带引号的字符串(例如1,2,“这是一个字符串,是的!”,四,5),您的Split将无效。您应该调查命令Import-CsvExport-Csv。这些将使您更好地控制输入和输出。

例如:

$sheet = Import-Csv .\BSEG_EXPORT.csv

foreach ($row in $sheet) {
    $row.11thColumnName = $row.11thColumnName.Replace("1", "@")
}

$sheet | Export-Csv stuffs.csv