从 CSV 中获取数组中的最大值
Get Greatest Value in Array from CSV
我有一个 csv,其中有分配有编号的键。当我向 csv 添加一个键时,它将被分配下一个值。
除了我的计算错误之外,我的代码执行了所有这些操作,因为我无法使代码达到 return 已分配数字的最大值。
我的 csv 看起来像:
Key,Count
9383, T-1
V-102,T-2
V-4982,T-65
85712, T-13
我的代码是:
$num = Import-Csv "$file1.csv" | Foreach {"$($_.Count)"}
for ($i=0; $i -lt $num.Count; $i++)
{
[string]$assignednumbers = $num[$i]
#Remove T in front of numbers
[string]$prefix = "T-"
if ($assignednumbers.StartsWith($prefix))
{
$assignednumbers = $assignednumbers.Replace($prefix, [string]::Empty)
}
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
}
我的线路有问题
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
当我只用 $greatestvalue = [int]$assignednumbers | Measure -Maximum
调用 $greatestvalue
时,我得到了我的 csv 中每个项目的最大属性列表。它应该 return 值为 65。
这是我要求添加号码并将其添加到 csv 的地方(这里没有问题)
#which key do you want to add
$key = Read-Host "Please Input new Key"
#getting t number
$addingnum = $greatestvalue + 1
$newnumber = "T-$addingnum"
#Get new key information
if ($key -gt 0)
{
[string]$key =$key
write-host -foregroundcolor green "The new Key is $key and has been assigned $newnumber"
}
#add vkey from input to csv
$NewLine = "{0},{1}" -f $newvkey,$newnumber
$NewLine | add-content -path "
你每次都覆盖你的$greatestvalue
。您需要在循环之外定义它,并且仅当当前值大于上一次迭代中已有的值时才进行更改:
$num = Import-Csv "E:.csv" | Foreach {"$($_.Count)"}
$greatestvalue = 0
for ($i=0; $i -lt $num.Count; $i++)
{
[string]$assignednumbers = $num[$i]
#Remove T in front of numbers
[string]$prefix = "T-"
if ($assignednumbers.StartsWith($prefix))
{
$assignednumbers = $assignednumbers.Replace($prefix, [string]::Empty)
}
if ($greatestvalue -lt ([int]$assignednumbers | Measure -Maximum).Maximum)
{
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
}
}
$greatestvalue
您正在尝试获取最多一个数字。 $greatestvalue 只是得到最后分配的值。要修复它,请更改
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
到
if ($greatestvalue -lt [int]$assignednumbers) {
$greatestvalue = $assignednumbers
}
我有一个 csv,其中有分配有编号的键。当我向 csv 添加一个键时,它将被分配下一个值。
除了我的计算错误之外,我的代码执行了所有这些操作,因为我无法使代码达到 return 已分配数字的最大值。
我的 csv 看起来像:
Key,Count
9383, T-1
V-102,T-2
V-4982,T-65
85712, T-13
我的代码是:
$num = Import-Csv "$file1.csv" | Foreach {"$($_.Count)"}
for ($i=0; $i -lt $num.Count; $i++)
{
[string]$assignednumbers = $num[$i]
#Remove T in front of numbers
[string]$prefix = "T-"
if ($assignednumbers.StartsWith($prefix))
{
$assignednumbers = $assignednumbers.Replace($prefix, [string]::Empty)
}
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
}
我的线路有问题
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
当我只用 $greatestvalue = [int]$assignednumbers | Measure -Maximum
调用 $greatestvalue
时,我得到了我的 csv 中每个项目的最大属性列表。它应该 return 值为 65。
这是我要求添加号码并将其添加到 csv 的地方(这里没有问题)
#which key do you want to add
$key = Read-Host "Please Input new Key"
#getting t number
$addingnum = $greatestvalue + 1
$newnumber = "T-$addingnum"
#Get new key information
if ($key -gt 0)
{
[string]$key =$key
write-host -foregroundcolor green "The new Key is $key and has been assigned $newnumber"
}
#add vkey from input to csv
$NewLine = "{0},{1}" -f $newvkey,$newnumber
$NewLine | add-content -path "
你每次都覆盖你的$greatestvalue
。您需要在循环之外定义它,并且仅当当前值大于上一次迭代中已有的值时才进行更改:
$num = Import-Csv "E:.csv" | Foreach {"$($_.Count)"}
$greatestvalue = 0
for ($i=0; $i -lt $num.Count; $i++)
{
[string]$assignednumbers = $num[$i]
#Remove T in front of numbers
[string]$prefix = "T-"
if ($assignednumbers.StartsWith($prefix))
{
$assignednumbers = $assignednumbers.Replace($prefix, [string]::Empty)
}
if ($greatestvalue -lt ([int]$assignednumbers | Measure -Maximum).Maximum)
{
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
}
}
$greatestvalue
您正在尝试获取最多一个数字。 $greatestvalue 只是得到最后分配的值。要修复它,请更改
$greatestvalue = ([int]$assignednumbers | Measure -Maximum).Maximum
到
if ($greatestvalue -lt [int]$assignednumbers) {
$greatestvalue = $assignednumbers
}