【发布时间】:2015-08-09 12:28:42
【问题描述】:
我在 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"
}
虽然这不是我最好的,但我以前有两种方法的语法,但是我已经废弃了它,因为它几乎没用。
非常感谢您的帮助,以便我知道我为什么会出错!
【问题讨论】:
-
Split()方法创建一个数组。这意味着$line.split(',')[5]表示“用逗号分割后的数组的第六项”,在这里几乎可以肯定是一个空值。我也很困惑为什么您要将文本文件导入 CSV,然后立即将其他内容保存到同一个变量,或者为什么您的 CSV 只有一个字段标题但似乎有两个字段。逗号是实际数据吗? -
在这里道歉@BaconBits,我没有复制和粘贴我的正确语法,我已经修改了这个现在让你指出我基本上创建了一个无用的“双变量”。关于我的 CSV,它确实只有一个字段标题,但数据都在一列中,它们不是单独的字段/列,所以要回答你的问题,是的
,和之后的任何数据实际上是第一个字段。 -
我不清楚您的预期输出。您是否只想要逗号前面的内容而放弃逗号后面的内容?
Import-Csv创建了一个对象数组,但您将其视为字符串数组 -
@Matt 差不多,
,之后的任何内容都是我的预期结果。您是否建议使用get-content和set-content子句来避免将对象数组视为字符串数组? -
您的示例没有意义,您想用逗号分隔一行,但您使用的是 Import-Csv,它会为您完成此操作。您的示例有一个名为 $line 的变量 - 它是从哪里来的?
标签: arrays string shell powershell csv