我在csv文件中的列上使用.Trim()函数时遇到问题。这个csv文件只包含整个表中的一列,所以它应该非常简单(他说)。
我的csv中的数据,附件A(注意:这是一个字段/列,而不是单独的列):
Name
C:\Users\kgroome\Documents\NOC\Documentation\Chrome, .pdf
C:\Users\kgroome\Documents\NOC\Documentation\CLI, .docx
C:\Users\kgroome\Documents\NOC\Documentation\DNS, .pdf
C:\Users\kgroome\Documents\NOC\Documentation\Encryption, .pdf
C:\Users\kgroome\Documents\NOC\Documentation\Excel, .xlsx
理想情况下,我需要在字符串中的最后5个字符之后从右到左修剪所有内容,或者在,
后分割,因为这样会更理想
我目前在,
之后的分割语法方面有以下几点:
$data = Import-Csv "C:\Support\Test05.csv"
foreach($line in $data){
$line.split(',')[5].Trim(); |
Export-Csv -Path "C:\Support\Test06.csv"
}
虽然这不是我最好的,但我已经有了两种方法的先前语法,但我已经废弃它,因为它几乎无用。
非常感谢你的帮助,所以我知道为什么我出错了!
答案 0 :(得分:0)
您使用CSV文件这一事实有点像红色鲱鱼,我想您想使用拆分的替换insread:
Get-Content "C:\Support\Test05.csv" | % {
$_ -replace '\s*,\s*', ','
} | Set-Content "C:\Support\Test06.csv"
答案 1 :(得分:0)
我建议这样做可以帮助您了解代码无法正常运行的位置。我仍然不是完全确定你的输出应该是什么样的,并且有更好的方法来做到这一点(比如正则表达式)
$file = "c:\temp\text.csv"
$newfile = "c:\temp\text1.csv"
Get-Content $File | ForEach-Object{
If($_ -match ","){
$_.Split(",").Trim()[1]
} Else {
$_
}
} | Set-Content $newfile
输出
Name
.pdf
.docx
.pdf
.pdf
.xlsx
Split根据您指定的分隔符从字符串创建数组。使用示例数据拆分逗号只会创建一个包含两个元素的数组。使用5
请求第六个元素只会生成一个null。
对于正则表达式解决方案,这就足够了,并在原始文件中生成相同的输出。
(Get-Content $File) -replace ".*,\s?" | Set-Content $file
这里的正则表达式会抓取所有字符直到逗号以及下面的空格(如果存在)。由于匹配要求逗号位于第一行,而#34; Name"被跳过,因为它不匹配。
答案 2 :(得分:0)
也许这个:
gc "C:\Support\Test05.csv" |
% { $_.split(',')[-1].trim()} |
set-content "C:\Support\Test06.csv"