如何计算csv中的行,然后遍历内容

时间:2015-09-30 16:11:54

标签: powershell-v4.0

我有一个csv,我想检查行数,然后循环遍历内容。我使用底部的代码来获取有效的计数,但我不知道如何循环csv并获取每列中的值。我已经读过,如果我指定列名,我可以使用select-object cmdlet来完成它,但是这个代码将适用于许多具有不同列名的csv。我有什么想法可以使这项工作?

$csv = Import-Csv -Path $requestFile  | measure

if(($csv).count-1 -gt 1){
    //do something
}

2 个答案:

答案 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