2012-08-09 3 views
12

CSV 파일을 처리 할 때 CSV 파일의 열 머리글이 무엇인지 알 수 없지만 powershell에서 csv 파일을 처리하려고합니다. 예를 들어powershell의 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 파일의 라인을 통해 내가 루프를합니까? 또는 Import-csv를 사용하지 않는 것과 같은 다른 방법이 있습니까? 당신의 이름을 얻을 중 하나 $column.Name를 사용할 수 있습니다를 CSV 파일의 각 행의 각 열을 반복의

답변

20
Import-Csv $path | Foreach-Object { 

    foreach ($property in $_.PSObject.Properties) 
    { 
     doSomething $property.Name, $property.Value 
    } 

} 
+0

감사합니다. Shay, 완벽하게 작동합니다. – simon

+0

이것은 나를 위해 첫 줄을 건너 뛰었습니다. 내 CSV에서 헤더를 사용하지 않고 있으며 쉼표가없는 행이 하나 밖에 없습니다. 예 : thing1 thing2 요컨대 .. 간단한 목록 – Radmation

7

약간 다른 방법은

$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 
    } 
} 

그래서 당신은 선택의 여지가 될 것 열 또는 $i을 사용하여 열의 수를 확인하십시오.

0
$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       
} 
관련 문제