String 将字符串强制转换为int,递增int,并在导出的CSV文件中查看更改

String 将字符串强制转换为int,递增int,并在导出的CSV文件中查看更改,string,powershell,csv,int,String,Powershell,Csv,Int,在导入PowerShell的CSV文件中,我有标题和数据行。有些数据是字符串中的整数;以下是CSV文件的示例: Header1, Header2, Header3 "8", "3", "17" 我知道我的强制转换是正确的,因为如果我运行$firstNumber.GetType().FullName,输出将读取System.Int32 这就是我遇到问题的地方。使用if语句,我尝试递增整数,然后将其导出到新的CSV文件中。以下是一个例子: foreach ($x in $file) { $f

在导入PowerShell的CSV文件中,我有标题和数据行。有些数据是字符串中的整数;以下是CSV文件的示例:

Header1, Header2, Header3 "8", "3", "17" 我知道我的强制转换是正确的,因为如果我运行
$firstNumber.GetType().FullName
,输出将读取
System.Int32

这就是我遇到问题的地方。使用
if
语句,我尝试递增整数,然后将其导出到新的CSV文件中。以下是一个例子:

foreach ($x in $file) {
    $firstNumber = $x.Header1
    [int]$firstNumber = $firstNumber
}
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"

当我把你的三个部分正确地放在一起时,我得到了你的预期输出

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

设置$x.Header1,然后导出$file。永远不要在$file中设置实际项。@JacobColvin是否有任何理由使用此方法处理其他数据?例如,在我的CSV文件中,我有
Header4
,在同一列中它下面的行中,数据等于
“Text”
。导入CSV文件后,我以以下方式更改该数据:
$x.Header4=“DifferentText”
。然后,我使用如上所述的相同导出语句,新导出的CSV文件显示了我所做的更改,尽管我使用了与您所说的相同的方法,即不更改
$file
中的实际项目。为什么这个方法有时有效,而其他时候无效?你能发布你的实际代码吗?@JacobColvin我想做的事情现在正在起作用(请参阅编辑原始问题),所以我的原始脚本的代码中一定有某种东西阻止了这种情况的发生。原始代码“有效”(即,正确的事情正在做)但你有很多事情都超出了范围。下面的答案已正确设置。