【问题标题】:Replace "Line Feed" in columns with "<br/>" in csv file - Powershell将列中的“换行”替换为csv文件中的“<br/>” - Powershell
【发布时间】:2014-05-22 10:37:28
【问题描述】:

我有一种情况,我从第三方收到 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的实际文件

这真的可以纠正吗,还是根本不可能?

【问题讨论】:

  • 一旦我意识到数据的实际样子,我就删除了我的答案。您需要让第三方发送未损坏的数据,因为您收到的数据是不可接受的。
  • @EricHauenstein 感谢 Mate,感谢您的尝试 :)
  • 我无法从此网络(公司防火墙)访问保管箱。任何带引号的字段是否包含嵌入的逗号?
  • 是的@mjolinor。包含换行符的同一列也包含逗号..

标签: powershell csv ssis


【解决方案1】:

试试这个:

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

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

或者,你可以这样做:

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

【讨论】:

  • 感谢@mjolinor,但问题是文件中的任何地方都没有回车,到处都是换行符。在列内容以及行尾。但是只有一列包含换行符,并且在“”内,所以我试图基于此设置条件,但直到现在都失败了。
  • 好的,那么让我们重新考虑并尝试替换任何紧跟双引号的换行符。
  • 我觉得我的问题还不够清楚。对此我深表歉意。这个答案是否适用于我在问题中提出的数据示例..
  • 我相信它应该。我没有要测试的数据,因此必须尝试重新创建它。你有这种格式的文件可以复制和测试吗?
  • 我刚刚看到帖子的更新。这与最初呈现的内容非常不同。我不能说这个解决方案可以解决这个问题。
【解决方案2】:

这有点难看,但它对我有用并且可以满足您的需求。

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

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多