【发布时间】:2021-04-11 21:23:46
【问题描述】:
我目前正在开发一个小型 PowerShell 脚本,该脚本应该将带有翻译的 CSV 文件拆分为相应语言的单个文件。为此,我使用Import-Csv cmdlet 导入源文件,其格式大致如下:
ResourceId;GermanTranslation;EnglishTranslation;Check
0;Deutscher Text;English text;OK
1; mit Leerzeichen ; with spaces ;OK
目标是以ResourceId|EnglishTranslation| 格式逐行表示翻译。为此,我构建了以下脚本:
Set-Variable SOURCE_FILE -Option Constant -Value ".\sourceFile.csv"
Set-Variable RESULT_FILE -Option Constant -Value ".\resultFile.csv"
foreach ($row in (Import-Csv -Path $SOURCE_FILE -Delimiter ";")) {
Add-Content -Path $RESULT_FILE -Value ($row.RessourceId + "|" + $row.EnglishTranslation + "|")
}
基本上,一切都按预期工作,但是当我检查结果时,我注意到结果中不再存在某些元素开头的空格:
0|English text|
1|with spaces |
很遗憾,我在the MS documentation 中没有找到解决此问题的参数,所以一开始我并不确定。 之后,我查看了RFC 4180,它或多或少准确地描述了 CSV 文件格式。它指出空格应该被视为字段的一部分,而不是被忽略。 应该意味着不是必须,所以很可能真的没有选择。
是否有可能保留空格而无需我自己解析整个文件?
【问题讨论】:
-
您可以尝试 PowerShell 版本 7 中的
Import-Csv,因为它有更多选项。另一种选择可能是在使用输入 csv 将单元格内容括在引号中以根据需要保留空格之前处理您的输入 csv。 ;-) -
如果您可以控制上游文件(显然您可能没有:-S),那么您最好使用带引号的字符串生成它 - 例如
1;" mit Leerzeichen ";" with spaces ";OK确实与Import-Csv一起保存。 -
即使在 PS 7 中也没有参数来控制
Import-Csv的空白行为。您可以尝试使用 .NET 类,请参阅 stackoverflow.com/a/33796861/7571258
标签: powershell