无法在Powershell中获取CSV行计数
我有一个csv文件,其结构如下:无法在Powershell中获取CSV行计数,powershell,csv,count,Powershell,Csv,Count,我有一个csv文件,其结构如下: Text,Url Learning Haskell,https://wiki.haskell.org/Learning_Haskell 我试图在循环csv文件之前获取行数,因为我不想在空结果上开始循环 通过研究(,),似乎Import csv具有.Count属性,但由于某些原因,我无法访问该属性。我正在使用Powershell v5 代码: [string]$markdownlink = "markdownlinks.csv" [string]$process
Text,Url
Learning Haskell,https://wiki.haskell.org/Learning_Haskell
我试图在循环csv文件之前获取行数,因为我不想在空结果上开始循环
通过研究(,),似乎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
当CSV文件中有一个数据行时,导入将生成单个对象有一个已知的错误,它将报告零作为$Var的
.Count
。这似乎发生在任何返回单个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
您可以执行
$markdownlinkstoProcess.GetLength(0)
或@($markdownlinkstoProcess.GetEnumerator()).Count
以获取csv中的行数$markdownlinkstoProcess.GetUpperBound(0)+1
也可以实现这一功能。