gpt4 book ai didi

csv - 在 PowerShell 中将 Csv 的一行拆分为多行

转载 作者:行者123 更新时间:2023-12-02 23:27:21 25 4
gpt4 key购买 nike

我有一个看起来像这样的 Csv:

No,BundleNo,Grossweight,Pieces,Tareweight,Netweight
1,Q4021317/09,193700,1614,646,193054
2,Q4021386/07,206400,1720,688,205712

我首先需要做的是对 Netweight 列进行一些数学运算以获得两个值,$x$y。然后我需要将 Csv 中的每一行拆分为 $x 行数据,其中每一行数据看起来像 "AL,$y"

在下面的示例中,我成功获取了每一行的 $x$y 的值。当尝试将每一行拆分为 $x 行时,问题就来了...:

$fileContent = Import-Csv $File

$x = ( $fileContent | ForEach-Object { ( [System.Math]::Round( $_.Netweight /25000 ) ) } )
$y = ( $fileContent | ForEach-Object { $_.Netweight / ( [System.Math]::Round( $_.Netweight /25000 ) ) } )

$NumRows = ( $fileContent | ForEach-Object { (1..$x) } )
$rows = ( $NumRows | ForEach-Object { "Al,$y" } )

当 Csv 中只有一行数据时,这段代码可以正常工作。 IE。如果 $x = 8 和 $y = 20,它将返回 8 行数据,看起来像 "AL,20"。但是,当 Csv 中有多个行时,我收到一条错误消息:

Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Int32".

我希望我已经解释清楚了,我们将不胜感激。谢谢,约翰

最佳答案

与其一遍又一遍地使用 ForEach-Object,只需遍历一次 csv 并生成您的 $x$y 结果一次一个:

$fileContent = @'
No,BundleNo,Grossweight,Pieces,Tareweight,Netweight
1,Q4021317/09,193700,1614,646,193054
2,Q4021386/07,206400,1720,688,205712
'@ | ConvertFrom-Csv

foreach($line in $fileContent){
$x = [System.Math]::Round( $line.Netweight / 25000 )
if($x -ne 0){
$y = $line.Netweight / $x
1..$x |ForEach-Object {"AL,$y"}
}
}

导致每行 $x"AL,$y" 字符串:

AL,24131.75
AL,24131.75
AL,24131.75
AL,24131.75
AL,24131.75
AL,24131.75
AL,24131.75
AL,24131.75
AL,25714
AL,25714
AL,25714
AL,25714
AL,25714
AL,25714
AL,25714
AL,25714

关于csv - 在 PowerShell 中将 Csv 的一行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31288889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com