2017-07-17 31 views
1

在我導入到PowerShell中的CSV文件中,我有標題和行數據。一些數據是字符串中的整數;這裏是什麼樣的CSV文件看起來像一個例子:將字符串投射爲int,遞增int並在導出的CSV文件中看到更改

 
Header1, Header2, Header3 
"8", "3", "17" 

雖然循環通過文件,我一定保存數據作爲變量,然後澆鑄這些變量爲整數;這裏有一個例子:

foreach ($x in $file) { 
    $firstNumber = $x.Header1 
    [int]$firstNumber = $firstNumber 
} 

我知道我在正確的鑄造,因爲如果我跑$firstNumber.GetType().FullName,輸出讀取System.Int32

這裏是我遇到我的問題。使用if語句,我嘗試增加整數,然後將其導出到新的CSV文件中。這裏有一個例子:

if ($firstNumber -ge 5) { 
    $firstNumber = 1 + $firstNumber 
} 
$x.Header1 = $firstNumber 
$file | Export-Csv 'C:\path\export.csv' -NoTypeInformation 

我知道值在PowerShell中正確的改變,因爲如果我行$firstNumber = 1 + $firstNumber後到處運行echo $firstNumber,輸出讀取9;因此更改只是不寫入導出的文件。我正在對導入的數據進行其他更改,然後將其導出到新的CSV文件中,但這些更改只是其中的數據類型不會被轉換爲不同的數據類型的字符串。


我創建了一個新的CSV文件來測試要少得多的物質,而且我還創建了一個新的PowerShell腳本,只用很少的數據我在新的CSV文件的工作。

新的CSV文件被導入:

Header1, Header2, Header3, Header4 
"8", "3", "17", "Text" 

新的PowerShell腳本:

# import file 
$file = Import-Csv 'C:\Import.csv' 
foreach ($x in $file) { 
    $firstNumber = $x.Header1 
    [int]$firstNumber = $firstNumber 
} 
if ($firstNumber -ge 5) { 
    $firstNumber = 1 + $firstNumber 
} 
$x.Header1 = $firstNumber 
$x.Header4 = "DifferentText" 
$file | Export-Csv 'C:\Export.csv' 

輸出寫入新的CSV文件:

#TYPE System.Management.Automation.PSCustomObject 
"Header1","Header2","Header3","Header4" 
"9","3","17","DifferentText" 
+6

您可以設置$ x.Header1,但隨後出口$文件。永遠不要在$文件中設置實際項目。 –

+0

@JacobColvin有沒有什麼原因可以與其他數據一起使用?例如,在我的CSV文件中,我有'Header4',並且在同一列下面的行中,數據等於''Text''。導入CSV文件後,我按以下方式更改該數據:'$ x.Header4 =「DifferentText」'。然後我使用與上面所述相同的導出語句,並且新導出的CSV文件顯示了我所做的更改,儘管我這樣做的方式與您所說的不改變'$ file'中的實際項目相同。爲什麼這種方法有時而不是其他時間有效? –

+0

你能發佈你的實際代碼嗎? –

回答

2

當我把你的三個部分一起正常我得到您的預期輸出。

$file = import-csv file.csv 

foreach ($x in $file) { 
    $firstNumber = $x.Header1 
    [int]$firstNumber = $firstNumber 
    if ($firstNumber -ge 5) { 
     $firstNumber = 1 + $firstNumber 
     # $firstnumber += 1 # two alternative ways to increment 
     # $firstnumber++ 
    } 
    $x.Header1 = $firstNumber 
} 
$file | Export-Csv '.\export.csv' -NoTypeInformation 

輸出示例:

> gc .\export.csv 
"Header1","Header2","Header3" 
"9","3","17"