如何从powershell中的csv文件循环一行
我想在PowerShell中处理一个csv文件,但是我不知道CSV文件中的列标题是什么时候处理的。
例如:
$path = "d:\scratch\export.csv" $csv = Import-csv -path $path foreach($line in $csv) { foreach ($head in $line | get-member | where-object {$_.MemberType -eq "NoteProperty"} | select Definition) { #pseudocode... doSomething($head.columnName, $head.value) } }
如何循环访问csv文件中的行,获取列的名称和值? 还是有另一种方法,我应该这样做(如不使用导入CSV)?
Import-Csv $path | Foreach-Object { foreach ($property in $_.PSObject.Properties) { doSomething $property.Name, $property.Value } }
迭代一个CSV文件的每一行的每一列的一个稍微的其他方式将是
$path = "d:\scratch\export.csv" $csv = Import-Csv -path $path foreach($line in $csv) { $properties = $line | Get-Member -MemberType Properties for($i=0; $i -lt $properties.Count;$i++) { $column = $properties[$i] $columnvalue = $line | Select -ExpandProperty $column.Name # doSomething $column.Name $columnvalue # doSomething $i $columnvalue } }
所以你可以select:你可以使用$column.Name
来获取列的名字,或者$i
来获得列的数量
$header3 = @("Field_1","Field_2","Field_3","Field_4","Field_5") Import-Csv $fileName -Header $header3 -Delimiter "`t" | select -skip 3 | Foreach-Object { $record = $indexName foreach ($property in $_.PSObject.Properties){ #doSomething $property.Name, $property.Value if($property.Name -like '*TextWrittenAsNumber*'){ $record = $record + "," + '"' + $property.Value + '"' } else{ $record = $record + "," + $property.Value } } $array.add($record) | out-null #write-host $record }