首页 > 解决方案 > 无法在 Powershell 中获取 CSV 行数

问题描述

我有一个结构如下的 csv 文件:

Text,Url
Learning Haskell,https://wiki.haskell.org/Learning_Haskell

我试图在遍历 csv 文件之前获取行数,因为我不想在空结果上开始循环。

通过研究(1 , 2),它似乎Import-csv有一个.Count属性,但由于某种原因我无法访问该属性。我正在使用 Powershell v5。

代码:

[string]$markdownlink = "markdownlinks.csv"
[string]$processedLinks = "completedlinks.txt"

$markdownlinkstoProcess = Import-Csv $markdownlink -Delimiter "," 

# Returns 0
[int]$count=$markdownlinkstoProcess.Count
Write-output $count

标签: powershellcsvcount

解决方案


当您在 CSV 文件中有一个数据行时,导入会生成一个对象它有一个已知的错误,即它将报告零作为.Count$Var 的。这似乎发生在任何返回单个 PSCustomObject 的事情上——但我不确定。

解决方案是强制它成为一个数组。您可以将其转换为[array]或简单地将其包装在@(). 以您的代码为例...

$markdownlinkstoProcess = Import-Csv $markdownlink -Delimiter ","
$markdownlinkstoProcess.GetType()
# result = PSCustomObject
$markdownlinkstoProcess.Count
# result = 0

$markdownlinkstoProcess = @(Import-Csv $markdownlink -Delimiter ",")
$markdownlinkstoProcess.GetType()
# result = Object[]
$markdownlinkstoProcess.Count
# result = 1

推荐阅读