替换&#34;换行&#34;在&#34; <br/>&#34;的列中在csv文件中 - Powershell

时间:2014-05-22 10:37:29

标签: powershell csv ssis

我遇到过从第三方收到csv文件的情况,其中一列包含其中的换行符。因此导致将csv文件上载到数据库时出现问题。

我正在使用SSIS包来解析csv文件。现在我想在SSIS使用它之前更正csv文件。

我更喜欢PowerShell脚本。

这个问题handling a CSV with line feed characters in a column in powershell 与我所看到的有一点区别非常相关..

我的数据采用这种格式(最后注意[LF]而不是[CR][LF]

Column1,Column2,Column3,Column4
Text1,"Text2[LF]","text3[LF]",text4[LF]

修改

数据示例

Column1, Column2, Column 3[LF]
1, "text text", text[LF]
2, "text[LF]
Some more text [LF]
Some more text", text[LF]
3, "text again", text[LF]

这是实际文件https://www.dropbox.com/s/wsxfyehlnls7m53/test.csv

这可以实际纠正,还是不可能?

2 个答案:

答案 0 :(得分:2)

试试这个:

(Get-content $file -Raw) -replace '\n(?=")','<br/>' |
 set-content $file

这应该替换任何后面紧跟双引号的换行符。

或者,你可以这样做:

(Get-content $file -Raw) -replace '\n"','<br/>"' |
 set-content $file

答案 1 :(得分:0)

这有点难看,但它对我有用并做你需要的。

首先,获取文件内容和列标题。

$text = Import-CSV $file
$columns = Get-Content $file -TotalCount 1
$columns = $columns.Split(",").Trim()

接下来循环遍历每个字段,并用<。

替换换行符
For ($r=0; $r -lt $text.Count; $r++) {
    For ($c=0; $c -lt $columns.Count; $c++) {
        $text[$r].($columns[$c]) = $text[$r].($columns[$c]).Replace("`n","<br/>")
    }
}

然后导出CSV

$text | Export-Csv $file -NoTypeInformation