Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 在CSV文件中替换引号和特殊字符的几个难题_Powershell - Fatal编程技术网

Powershell 在CSV文件中替换引号和特殊字符的几个难题

Powershell 在CSV文件中替换引号和特殊字符的几个难题,powershell,Powershell,我在处理一些需要清理并加载到数据库中的CSV文件时遇到了一些难题 我对PowerShell相当熟练,但对正则表达式和csv列操作不太在行 这就是我面临的问题;我正在处理的CSV文件中有一个“notes”字段,可以包含各种字符。主要问题是,我需要删除字段中的换行符和引号,但将常规换行符和文本限定引号保留在它们应该位于的位置。我可以在整个文件中删除换行符和引号,但不能具体删除字段中的字符 我曾尝试使用正则表达式来实现这一点,但运气不太好,老实说,我对正则表达式不是那么熟练。我希望这里有人能帮上忙 编

我在处理一些需要清理并加载到数据库中的CSV文件时遇到了一些难题

我对PowerShell相当熟练,但对正则表达式和csv列操作不太在行

这就是我面临的问题;我正在处理的CSV文件中有一个“notes”字段,可以包含各种字符。主要问题是,我需要删除字段中的换行符和引号,但将常规换行符和文本限定引号保留在它们应该位于的位置。我可以在整个文件中删除换行符和引号,但不能具体删除字段中的字符

我曾尝试使用正则表达式来实现这一点,但运气不太好,老实说,我对正则表达式不是那么熟练。我希望这里有人能帮上忙

编辑:下面是示例数据

"123"   ""  "2017-02-13 10:26:08" "123456789"   "2017-02-10"    "No"    "Yes"   "Yes"   "No"    "sa‌​mple text 
<crlf> ""additional text""
<crlf> 
<crlf> "    "Y" <crlf>
这应该是一行,除了结尾外没有其他内容

内置的Import-Csv cmdlet可正确导入多行和带引号的值

您的文件以制表符分隔,因此我们将指定`t:


发布一个两行的示例会很有帮助这里是一个输出示例。看起来这并不是在保存返回字段,所以我手动添加了它们。输出应该是这只是一条记录。123 2017-02-13 10:26:08 123456789 2017-02-10否是否示例文本附加文本Y设置专用CSV解析器。有许多可用于.Net的,powershell可以加载和使用.Net对象。@shannonjk请将此纳入您的问题中。我们看不到如何在评论中正确设置格式。给我们看几句话,看看你自己可能会做些什么来解决这个问题。因此,这不是一个代码编写服务,而是一个程序员和编程爱好者的社区。我相信我们能够解决这个问题。这是完美的。我对正则表达式不太在行,你能解释一下你做的第二个替换函数在做什么吗?我使用类似的替换尝试了foreach和foreach对象,包括您使用的引号,它替换了所有引号,但这似乎完全符合我的需要,我不知道如何处理:。它匹配1个或更多表示为\r和\n的特殊新行字符。试试看:这是学习正则表达式的一个很好的在线游乐场。
Import-Csv c:\file.csv -Delimiter "`t" | ForEach {
    $_.notes = $_.notes -replace '"', '' -replace '[\r\n]+', ' '
    $_
} | Export-Csv c:\output.csv -Delimiter "`t" -NoTypeInformation -Encoding UTF8