【问题标题】:Powershell Strange behaviour with Import-CSVImport-CSV 的 Powershell 奇怪行为
【发布时间】:2018-10-17 05:19:14
【问题描述】:

我有以下 powershell 代码:

clear;
$importedIDs = (Import-Csv "testing.csv" -Delimiter ';').id;

Write-Host $importedIDs.Length;

for ($i=0; $i -lt $importedIDs.Length; $i++) {
  Write-Host $($importedIDs[$i]);
}

目标是只读取 csv 文件中的 id 列,如下所示:

"created";"id"
"2018-04-04 21:03:01";"123456"
"2018-04-04 21:03:01";"123457"

当有两行或更多行时,输出符合预期:

2
123456
123457

但是,当 csv 文件中只有 1 行(id 为 123456 的行)时,输出为:

6
1
2
3
4
5
6

期望的输出是:

1
123456

谁能解释为什么会发生这种情况以及我该如何解决这个问题? 任何帮助表示赞赏

【问题讨论】:

    标签: windows powershell csv import powershell-3.0


    【解决方案1】:

    如果 csv 中有多行,则会得到一个字符串数组。每行一个数组元素。因此索引适用于行。如果只有一行,您不会得到一个包含一个字符串的数组,正如您可能期望的那样。相反,您会得到一个字符串。在字符串上使用索引时,powershell 会将字符串视为字符数组,因此只返回一个字符。

    【讨论】:

      【解决方案2】:

      您可以稍微重写您的脚本来解决 J. Bergmann 所描述的问题。

      您可以使用foreach 循环和像这样循环遍历数组中的元素。 foreach 不会将字符串视为字符数组

      clear;
      $importedIDs = (Import-Csv "testing.csv" -Delimiter ';').id;
      
      Write-Host $importedIDs.Length;
      
      foreach ($importedID in $importedIDs) {
        Write-Host $($importedID);
      }
      

      【讨论】:

      • 谢谢。我就是这么做的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 2021-10-02
      • 2016-11-06
      • 2014-06-05
      • 1970-01-01
      相关资源
      最近更新 更多