我有一个脚本,它通过一个包含两种数据格式(XY:ZABC
或0.xyz
)的CSV文件。然后将这些值保存在CSV文件中,该文件包含一列和可变行数。我正在尝试设置我的脚本,以便对于值为0.xyz
的数字,它将乘以1440,然后将其存储在$Values
中。格式XY:ZABC
的数量也将存储在$Values
中。
$Values = @(Get-Content *\source.csv -Raw) -split '\s+' |
Where-Object {$_ -like '*:*' -or '0.*'}
"UniqueActiveFaults" | Out-File *\IdealOutput.csv
$Values | Sort-Object -Unique | Out-File *\IdealOutput.csv
我尝试通过添加以下代码来实现此目的:
foreach ($i in $Values) {
if ($i -lt 1) {$i*1440}
}
我还尝试使用do {$i*1440} while ($I -lt 1)
循环进行此操作,但结果显示的数字0.xyz
显示为1440次。我认为这是由于$Values
正在采取的数据类型,但不确定。
示例数据:
0.12345
00:9090 90:4582
0.12346
0.1145
0.145654
0.5648
01:9045 90:4500
90:4546
BA: 1117 BA:2525
答案 0 :(得分:2)
在您的代码中,$Values
是一个字符串数组。字符串上的“乘法”操作是重复它。要像对待数字一样对待它,在乘法之前强制转换为浮动。
foreach ($i in $Values) {
if ($i -lt 1) {[float]$i * 1440}
}
正如Tony Hinkle指出的那样,这个循环只会将操作的结果输出到调用者(如果不管道它,则输出控制台)。如果您希望阵列反映更改,则必须将其存储回来。
for ($i = 0; $i -lt $Values.length; $i++) {
if ($Values[$i] -lt 1) { [float]$Values[$i] *= 1440 }
}
请注意,这会将一些值数组保留为字符串,将某些值保留为浮点数。根据您使用它的方式,您可能需要进行进一步的演员表。
答案 1 :(得分:1)
使用$i*1440
时,只是告诉Powershell将这两个值相乘并返回产品。如果要更改$ i的值,则需要使用$i = $1 * 1440
。
您可能还有其他问题,但这是假设您从输入中获得了分配给$ i的正确值。