首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印小于用户输入的数字的值。

打印小于用户输入的数字的值。
EN

Stack Overflow用户
提问于 2018-12-05 23:06:31
回答 3查看 57关注 0票数 0

我有一个名为files.txt的文件,其中有以下数据:

花园厨房1;400;33000

11;178;56124;浴室屋顶

7;777;20000;室内厨房

10;150;1000000;车库

我需要输入一个数字,并将其与每一行的第三列进行比较。如果第三列中的值较小,它将打印出该行,否则它将什么也不做。

例如,如果我读到数字50000,程序应该打印:

花园厨房1;400;33000

7;777;20000;室内厨房

到目前为止,我的代码如下:

代码语言:javascript
复制
$num = Read-Host "Enter a number"
             $t = Get-content "files.txt" | %{$_.split(";")[2]} 
              for($i = 0; $i -le $t.Length; $i++)
             {
                 if ($num -ge $t[$i])
                 {
                   write-host $t[$i]
                 }
             }

有人能帮忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-06 00:26:47

过会儿再做分裂。现在你要把其他的列都扔了。我也要做一个预测:

代码语言:javascript
复制
# making the type int, will validate the input
[int]$num = Read-Host "Enter a number"
$lines = Get-content "files.txt"

foreach($line in $lines) {
    $parts = $line -split ';'

    # make sure we have enough parts
    if($parts.Length -ge 4) {
        # we have enough
        # [int] is not really needed here, but it adds clarity
        if($num -ge [int]$parts[2]) {
            Write-Output $line
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-12-06 00:23:09

我认为,如果您将您的文件作为一个CSV来处理,并且只使用自定义头导入它,这会更容易一些。

代码语言:javascript
复制
$t = Import-Csv files.txt -Delimiter ';' -Header 'Col1','Col2','Col3','Col4'

此时,每一行都有如下所示的对象:

代码语言:javascript
复制
Col1 : 1
Col2 : 400
Col3 : 33000
Col4 : garden kitchen

Col1 : 11
Col2 : 178
Col3 : 56124
Col4 : bathroom roof

Col1 : 7
Col2 : 777
Col3 : 20000
Col4 : oneroom kitchen

Col1 : 10
Col2 : 150
Col3 : 1000000
Col4 : garage yard

现在只需要一个数字(确保将其转换为[int]或PowerShell会认为它是字符串,而不是在时机成熟时将其作为数字进行比较),并使用Where语句迭代$t筛选条件(并将其转换回您所期望的格式,跳过第一行以省略我们设置的标题):

代码语言:javascript
复制
[int]$num = Read-Host "Enter a number"
$t|?{$num -gt $_.Col3}|ConvertTo-Csv -del ';' -NoTypeInformation|Select -skip 1
票数 3
EN

Stack Overflow用户

发布于 2018-12-06 00:47:02

我想您使用的是ps5.1+,因为您没有提到版本。这要求版本4+使用.Where()而不是Where-Object

这并不能验证用户输入是否为int。如果需要的话,添加它很简单。笑一笑

代码语言:javascript
复制
# fake reading in a text file
#    in real life, use Get-Content
$InStuff = @'
1;400;1000000;garden kitchen
11;178;56124;bathroom roof
7;777;20000;oneroom kitchen
10;150;1000000;garage yard
'@ -split [environment]::NewLine

$Choice = Read-Host -Prompt 'Please enter a lower-limit number '

$InStuff.Where({[int]$_.Split(';')[2] -ge [int]$Choice})

输出..。

代码语言:javascript
复制
Please enter a lower-limit number : 123456
1;400;1000000;garden kitchen
10;150;1000000;garage yard
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53642165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档