【问题标题】:handling a CSV with line feed characters in a column in powershell在powershell的列中处理带有换行符的CSV
【发布时间】:2013-01-10 23:38:00
【问题描述】:

目前,我有一个系统可以创建一个分隔文件,如下所示,我在其中偶尔模拟了列中的额外换行符。

第 1 列、第 2 列、第 3 列、第 4 列

文本1,文本2[LF],文本3[LF],文本4[CR][LF]

Text1,Text2[LF][LF],text3,text4[CR][LF]

文本1,文本2,文本3[LF][LF],文本4[CR][LF]

文本1,文本2,文本3[LF],文本4[LF][LF][CR][LF]

通过使用 Notepad++ 并使用以下 REGEX 忽略有效的回车/换行组合,我已经能够删除引起我关注的换行:

(?<![\r])[\n]

但是我无法使用 powershell 找到解决方案,因为我认为当我获取 csv 文件的内容时,文本字段中的换行符将被忽略,并且该值作为单独的对象存储在分配给获取内容操作。我的问题是,如果 cmdlet 在加载数据时忽略换行符,如何使用 replace 将正则表达式应用于 csv 文件?

我还尝试了以下方法来加载我的 csv 的内容,这也不起作用,因为它只会产生一个长字符串,这类似于使用 -join(get-content)。

[STRING]$test = [io.file]::ReadAllLines('C:\CONV\DataOutput.csv')
$test.replace("(?<![\r])[\n]","")
$test | out-file .\DataOutput_2.csv

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    差不多了,我可以只建议 3 处更改:

    • 使用ReadAllText(…) insteadReadAllLines(…)
    • 使用-replace … 而不是.Replace(…),只有这样第一个参数才会被视为正则表达式
    • 用替换结果做一些事情(例如,将其分配回$test

    示例代码:

    [STRING]$test = [io.file]::ReadAllText('C:\CONV\DataOutput.csv')
    $test = $test -replace '(?<![\r])[\n]',''
    $test | out-file .\DataOutput_2.csv
    

    【讨论】:

    • 谢谢,我已经确认您的三个建议是解决问题的关键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2018-02-23
    • 2013-12-03
    • 2021-12-16
    • 2018-11-04
    • 2021-02-25
    相关资源
    最近更新 更多