我有一个csv,我想检查行数,然后循环遍历内容。我使用底部的代码来获取有效的计数,但我不知道如何循环csv并获取每列中的值。我已经读过,如果我指定列名,我可以使用select-object cmdlet来完成它,但是这个代码将适用于许多具有不同列名的csv。我有什么想法可以使这项工作?
$csv = Import-Csv -Path $requestFile | measure
if(($csv).count-1 -gt 1){
//do something
}
答案 0 :(得分:0)
Import-Csv
创建一个对象列表。此列表已具有Count
属性,因此您无需自行测量:
$csv = Import-Csv -Path $requestFile
if ($csv.Count -gt 2) {
# do something
}
不确定为什么要将“do someting”限制为超过2行的CSV。
如果您还想循环遍历每一行的列,您可以使用this answer中所述的嵌套循环来执行此操作:
$csv = Import-Csv -Path $requestFile
if ($csv.Count -gt 2) {
$csv | ForEach-Object {
foreach ($property in $_.PSObject.Properties) {
doSomething $property.Name, $property.Value
}
}
}
要获得进一步的帮助,您需要解释您实际想要对列进行的操作。
答案 1 :(得分:0)
您不需要通过管道Measure
来获取行数。实际上,您在$csv
中存储的变量不是csv数据,而是Measure
的输出,因此您应该将管道移至Measure
。
以下是一个例子:
PS C:\temp> $csv = Import-Csv .\test.csv
PS C:\temp> # Here you can perform your check on the size of the csv
PS C:\temp> $csv.Count
4
PS C:\temp> # ... and you can get all the data like this:
PS C:\temp> $csv
Year : 1997
Make : Ford
Model : E350
Description : ac, abs, moon
Price : 3000.00
Year : 1999
Make : Chevy
Model : Venture "Extended Edition"
Description :
Price : 4900.00
Year : 1999
Make : Chevy
Model : Venture "Extended Edition, Very Large"
Description :
Price : 5000.00
Year : 1996
Make : Jeep
Model : Grand Cherokee
Description : MUST SELL!
air, moon roof, loaded
Price : 4799.00
我的csv看起来像这样:
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00