【问题标题】:Split CSV File Issue拆分 CSV 文件问题
【发布时间】:2018-11-20 18:55:54
【问题描述】:

我目前有一个每周生成的 CSV 文件,我用它来判断哪些服务器安装了某些软件。我想编写一个脚本来自动执行此过程,但在尝试拆分文件时遇到了问题。

我的文件有 8 行文档,真正的数据直到第 9 行才开始。接下来,每行数据有 15 列,我想将它们分成 $temp[0]、...、$temp[14]。总文件长约 3,800 多行。然而,我的问题是,我的数据中有逗号,用于格式化日期、包含多个项目的单元格(即“CE、_Linux、Windows”)等。所以我遇到的是我不能t 使用$example.Split(","),因为它用逗号分隔每个项目,而我真的希望它按我的 CSV 文件的列分隔。

你知道怎么做吗?

【问题讨论】:

  • 你真的应该研究一下 PowerShell Import-Csv cmdlet。它还具有-delimiter 参数(您可以在其中指定逗号或任何其他分隔符)。就像Import-Csv -path \\YourCsvFilePathHere\CsvFile.csv -delimiter ,
  • 如果数据字段中包含逗号并且这些字段没有被正确引用,则该文件不符合标准并且实际上不是有效的 CSV。在这种情况下,您应该返回生成文件的任何进程,并找到一种方法让它生成有效的 CSV 文件。

标签: arrays powershell powershell-2.0 comma


【解决方案1】:

就像@vivek-kumar-singh 提到的那样,您可以通过Import-Csv 将您的csv 导入到一个对象中

Import-Csv -Path <pathToFile> -Delimiter ','

接下来,您可以遍历您的对象并处理某些行(例如$import[0]) 要在 Object 中处理 csv 的某一列,只需执行 $import.columnHeader[0]

之类的操作

【讨论】:

  • 如果某些项目包含逗号,我将如何使用 CSV 文件的分隔符?我想拆分用逗号分隔的列,但我不想拆分也用逗号分隔的列中的数据。
  • 如果条目还包含,,我想不出一种简单的方法来分隔它。如果在导出期间将 csv 分隔符更改为 ;,您可能会运行得最好。
【解决方案2】:

我遇到了几乎同样的问题,这对我有用:

Import-CSV $Report -Delimiter ':'   | Select-Object * |  Export-CSV $Report2 -Encoding utf8 -Delimiter ':' -NoTypeInformation 
$Quotes = get-content -path $Report2
$Quotes | foreach {$_ -replace "`"", ""} | Set-Content $Report2

这会解析行并删除双引号。 希望对你有用!

【讨论】:

  • 如果某些项目包含逗号,我将如何使用 CSV 文件的分隔符?我想拆分用逗号分隔的列,但我不想拆分也用逗号分隔的列中的数据。
  • 我认为最简单的方法是在创建 CSV 时更改分隔符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2017-09-30
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多