2015-05-19 138 views
0

我有一个脚本,通过与数据(XY:ZABC0.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 
+2

可以为您的CSV数据请 – Paul

+0

@保罗,我已经添加了样本数据的一些样本添加到原来的职位 –

回答

1

当您使用$i*1440是只是告诉PowerShell来乘两个值并返回该产品。如果您想更改$ i的值,则需要使用$i = $1 * 1440

你可能有其他一些问题,但这是假设你正在从输入分配到$我正确的价值观。

2

在你的代码,$Values是字符串数组。字符串上的“乘法”操作是重复它。要像数字一样对待它,在相乘之前进行浮动。

foreach ($i in $Values) { 
    if ($i -lt 1) {[float]$i * 1440} 
} 

正如托尼·辛克尔指出,这个循环将简单地输出操作给调用者的结果(或控制台,如果你不用管吧)。如果你想让你的数组反映变化,你必须将其存储回来。

for ($i = 0; $i -lt $Values.length; $i++) { 
    if ($Values[$i] -lt 1) { [float]$Values[$i] *= 1440 } 
} 

请注意,这将使您的一些值数组作为字符串和一些浮点数。根据你使用它做什么,你可能需要进一步演员。

+0

谢谢。这很好。我有两个问题:(a)请你解释你的第二段代码,我不知道我是否理解使用$ Values.length和if条件操作在第二行。 (b)另外,我的循环输出给了我一个有效的数字,但每次都返回一个附加的0(零)。任何想法这个零来自哪里? –

+0

第二位中的for是循环迭代语法,其中'$ i'是数组中的数字索引,并且从0到数组的长度。这是必要的,因为'foreach'不能访问原始数组来修改它。至于额外的0,你将不得不粘贴你的代码,可能在一个新的问题。 –