2015-10-01 59 views
0

我有一個.csv文件,我想將其導入到PowerShell中,然後通過文件改變某些值迭代。然後我想要輸出附加到原始.csv文件,以便更新值。使用PowerShell中的重複的標題.csv文件

我的問題是,.csv文件有頭這不是唯一的,而不能因爲這樣既不會在其他程序中工作改變。最初我在PowerShell中定義了自己的頭文件以解決此問題,但當輸出文件需要使用舊頭文件時,輸出文件會包含這些新頭文件。

我也曾嘗試ConvertFrom-Csv這意味着我無法再訪問我需要的列,所以很多運行時錯誤。

什麼是理想的是能夠使用定義的列標題,然後再轉換回原來的列標題。我當前的代碼如下:

$csvfile = Import-Csv C:\test.csv| Where-Object {$_.'3' -eq $classID} | ConvertFrom-Csv 
foreach($record in $csvfile){ 
*do something*} 
$csvfile | Export-Csv -path C:\test.csv -NoTypeInformation -Append 

我現在已經在網上搜索好幾個小時,並試圖一切,我已經遇到,但無濟於事。 在此先感謝。

+1

一個對象不能有重複的屬性(這是什麼意思?)。你知道CSV文件包含多少列嗎? –

+0

CSV文件包含78列。標題是它們包含的數據的類型,可以是long或byte。然而PowerShell不會讓我把這些作爲標題,因爲它們不是唯一 – Jafferwaffer

+0

1.打開文件與自定義標題 2.導出文件具有自定義標題 3.刪除文件 4.盈利的第一線? – sodawillow

回答

0

這是一個有點hackish實現,但應該工作。

  1. 刪除所有標題爲單行,並保存到某個地方
  2. 解析新的結果集(用頭中刪除)
  3. 頂部添加行了,當你完成

CSV是一個逗號分隔的文件,您不必將其視爲結構化數據。隨意拼接和骰子,如你所願。

+0

感謝您的回答,但這不是我正在尋找的。 – Jafferwaffer

0

既然你事先知道有多少列中輸入CSV文件,你可以導入無頭和內部處理。例如:

$columns = 78 

Import-Csv "inputfile.csv" -Header (0..$($columns - 1)) | Select-Object -Skip 1 | ForEach-Object { 
    $row = $_ 
    $outputObject = New-Object PSObject 
    0..$($columns- 1) | ForEach-Object { 
    $outputObject | Add-Member NoteProperty "Col$_" $row.$_ 
    } 
    $outputObject 
} | Export-Csv "outputfile.csv" -NoTypeInformation 

該實施例產生的新PSObjects,然後輸出與通用列名(COL0,Col1中,等等)的新的CSV文件。

+0

謝謝你的回答,我會在有機會回帖時嘗試一下。 – Jafferwaffer

相關問題