Powershell CSV换行符

时间:2016-02-23 11:33:14

标签: sql csv powershell

大家好,如果以前已经回答,我道歉。 我是powershell的新手,想要一些指导。

我们有一个运行存储过程的MSSQL服务器来生成.csv日志 然后通过NXlog获取此日志并将其转发到我们的日志服务器。

问题是其中一个字段包含多行查询,需要缩减为一行

e.g。 当前格式

列1 |列2 |

3

| Column4

所需格式

列1 |列2 |栏3 | Column4

我目前正在使用以下内容,但现在运气好了所需的格式

$csv = 'C:\Users\user\Documents\input.csv'
foreach ($csv_file in gci C:\Users\user\Documents\input.csv) {
  $csv1 = Import-csv $csv
    $props = $csv[0].psobject.properties | select -expand name
      $csv1 |
        foreach {
          foreach ($prop in $props){
              $_.$prop = $_.$prop -replace "`s`r`n`t",' '
              }
        }
  $csv1 | export-csv C:\Users\user\Documents\output.csv -NoTypeInformation
}

我相信新行在sql中使用char13。如果需要,我可以提供样本csv

非常感谢任何帮助我走向正确方向的帮助

由于

3 个答案:

答案 0 :(得分:0)

正则表达式使用反斜杠作为引用字符(有关列表,请参阅here)。 “s”不会匹配单个空格字符。

正则表达式中的CR-LF序列是“\ r \ n”,所以你应该用

获得更好的结果
$text -replace "\s*\r\n\s*"," "

但是空白字符类“\ s”已匹配“\ r”和“\ n”(请参阅​​here),因此要匹配非CR / LF空格(opt),CR-LF,非-CR / LF空格(opt)你需要像:

$text -replace "[\t \f\v\x85]*\r\n[\t \f\v\x85]**"," "

答案 1 :(得分:0)

感谢您的帮助。

我们改变了使用输出所需效果的vbs脚本的方法。

主要问题是SQL输出到csv导致格式化问题的方式

答案 2 :(得分:-1)

  $_.$prop = $_.$prop -replace "`s`r`n`t",' '

只会替换空白字符''后跟一个回车字符,后跟一个换行符,后跟一个制表符。

如果要替换独立字符,请尝试使用

  $_.$prop = $_.$prop -replace "`r|`n|`t", ''

  $_.$prop = $_.$prop -replace "[`r`n`t]", ''
编辑:正如理查德正确提到的那样,对任何事情都不是逃避。它将取代一个'代替。