我的问题是在CSV文件中替换12个字符位置的大约3000行"quot;(空格(带字符"&";。这似乎是一项容易的任务,但我坚持了下来。我试过这个
CVS文件示例:
03 Aug 2022 00:00:00,212526237600000000,.......................
03 Aug 2022 00:00:00,212526237600000001,.......................
03 Aug 2022 00:00:00,212526237600000002,.......................
我的尝试:
$filename = "File"
$temfile = [System.IO.Path]::GetTempFileName()
Get-Content $filename |
Foreach($line in $filename )
{
($line.SubString(0,12) -replace " ",",") )
} |
Add-Content $temfile
Remove-Item $filename
Move-Item $temfile $newfile
我将感谢任何有用的答案,提前感谢Lightfoot
主要问题是将Get-Content
管道传输到语言关键字foreach
,而不是cmdletForEach-Object
。然后将循环的结果管道传输到Add-Content
。这将导致语法错误,管道不能位于语言关键字的开头或结尾。
您的替换逻辑也有一个问题,一个简单的例子:
'03 Aug 2022 00:00:00,212526237600000000,..........'.SubString(0, 12) -replace ' ', ','
将导致:
03,Aug,2022,
这显然不是你想要的。这个正则表达式可能会执行您想要的操作:(?m)(?<=^.{11})s
。
例如,给定多行字符串:
$string = @'
03 Aug 2022 00:00:00,212526237600000000,........
03 Aug 2022 00:00:00,212526237600000001,........
03 Aug 2022 00:00:00,212526237600000002,........
'@
结果是:
PS ..> $string -replace '(?m)(?<=^.{11})s', ','
03 Aug 2022,00:00:00,212526237600000000,........
03 Aug 2022,00:00:00,212526237600000001,........
03 Aug 2022,00:00:00,212526237600000002,........
如果您想在插入新逗号后保留空白,只需从正则表达式中删除s
即可:
$string -replace '(?m)(?<=^.{11})', ','
至于代码的外观:
(Get-Content pathtomyfile.csv -Raw) -replace '(?m)(?<=^.{11})s', ',' |
Set-Content pathtomyNewFile.csv