2012-08-09 6 views
12

में एक सीएसवी फ़ाइल से एक लाइन के माध्यम से कैसे लूप करूं, मैं पावरहेल में एक सीएसवी फ़ाइल को संसाधित करना चाहता हूं, लेकिन मुझे नहीं पता कि CSV फ़ाइल में कॉलम शीर्षलेख संसाधित होने पर क्या होगा।मैं powerhell

उदाहरण के लिए:

$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 फ़ाइल में लाइन के माध्यम से मैं पाश करना, कॉलम और मान का नाम हो रही है? या क्या ऐसा कोई और तरीका है जो मुझे करना चाहिए (जैसे आयात-सीएसवी का उपयोग नहीं करना)?

उत्तर

20
Import-Csv $path | Foreach-Object { 

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

} 
+0

धन्यवाद शे, कि पूरी तरह से काम करता है की संख्या प्राप्त करने। – simon

+0

यह मेरे लिए पहली पंक्ति छोड़ दिया। मैं अपने सीएसवी में हेडर का उपयोग नहीं कर रहा हूं और मेरे पास केवल एक पंक्ति है जिसमें कोई कॉमा नहीं है: thing1 thing2 ect .. दूसरे शब्दों में एक साधारण सूची – Radmation

7

एक एक 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 
    } 
} 

ताकि आप विकल्प है: आप के नाम पाने के लिए $column.Name उपयोग कर सकते हैं स्तंभ, या $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       
}