我只需要删除TAB分隔文件中的双引号内的TAB。我不知道如何检测实际字段的双引号与字符串本身的双引号。我不想意外地删除实际的TAB字段分隔符(当然)。
我有一个框架脚本,我 * 相信 * 我需要对$_ object/record做一些工作,但我不知道下一步是什么,检测所有字段,然后在不删除实际分隔符的情况下擦除任何TAB。我在CODE片段中放置了一个注解,说明我认为应该在何处处理数据字段。
原始数据
_record_number record_id id_testing Notes IntakeComplete
111 6 5 " We will not be testing because of covid 19" 1
222 6 5 " We will not be "testing because of covid 19" 1
333 6 5 " We will not be "testing" because of covid 19" 1
字符串
最容易解决的情况是_record_number 111。我有一个记录,其中一个单双引号内的两个双引号内的标签。非常奇怪,所以我在_record_number 222中复制了这个问题。
代码
#-Import TABs Inside Quotes Issue.tsv
#-Declare File Paths
$SourceFile = "TABs Inside Quotes Issue.tsv"
$ExportFile = "TABs Inside Quotes Issue_Updated.tsv"
#---------- Attempt to find Double Quoted Fields and Remove TABs ONLY within them and therefore leaving the TAB delimiters untouched
Import-Csv $SourceFile -Delimiter "`t" |
ForEach-Object {
#-Process Data Fields Here
$_
} |
Export-Csv $ExportFile -Delimiter "`t" -UseQuotes Never -NoTypeInformation
型
x1c 0d1x的数据
TL;DR
我使用上面的代码来修复我的数据问题的问题是,我正在修复每个字段的每个问题。如何对所有字段应用标准修复?也就是说,如何编写脚本来检查整行列,而不是在每列中编写代码,然后检查数据?
如果你好奇为什么我在Export-Csv中使用-UseQuotes Never
,我这样做是因为BCP需要删除所有的引号,因为BCP实用程序无法处理引号字段。通过PowerShell Export-Csv Cmdlet导出CSV时使用-UseQuotes Never
参数/值,它将删除几乎每个单引号,但它不会首先从引用字段中删除任何分隔符字符。对于中包含引号的Quoted字段,它有时也会产生意外结果。不管这个问题,是造成我的悲伤是标签内引用的领域,本身是通过标签分隔。
1条答案
按热度按时间v8wbuo2f1#
您可以使用两种替代方案,更强大的一种是解析Tsv,然后更新该列中的值:
字符串
第二个选项是以纯文本的形式读取内容,并直接在
"
之后修剪制表符,最后将字符串解析为对象:型
有关正则表达式的详细信息,请参见https://regex101.com/r/W1lJgx/1。
我建议您不要使用
-UseQuotes Never
,因为正如另一位用户在评论中所指出的那样,引号将在阅读Tsv时用作分隔符。在这种情况下,不需要ConvertFrom-Csv
,只需返回Set-Content
:型