我有以下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
任何人都可以解释为什么会这样,我该如何解决这个问题? 任何帮助表示赞赏
答案 0 :(得分:2)
如果csv中有多行,则会得到一个字符串数组。每行一个数组元素。因此索引适用于行。如果只有一行,则不会得到包含一个字符串的数组,正如您可能期望的那样。你得到一个字符串。在字符串上使用索引时,PowerShell会将字符串视为字符数组,因此只返回一个字符。
答案 1 :(得分:0)
您可以稍微重写一下脚本,以解决J. Bergmann所描述的问题。
而不是使用for
循环遍历数组中的每个元素,其中一个"元素"可以引用字符串数组中的字符串或字符串中的字符,您可以使用foreach
循环并循环遍历数组中的元素。 foreach
不会将字符串视为字符数组
clear;
$importedIDs = (Import-Csv "testing.csv" -Delimiter ';').id;
Write-Host $importedIDs.Length;
foreach ($importedID in $importedIDs) {
Write-Host $($importedID);
}