2017-07-17 19 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"