【问题标题】:Powershell casting array objects and changing datatypesPowershell 转换数组对象和更改数据类型
【发布时间】:2016-07-22 16:54:52
【问题描述】:

我有两个需要比较的 powershell 字符串数组(来自导入 csv)。 它们是这样的:

Array 1  / File 1
"Date","Descrption","Amount"
"05/12/2016","Desc1","-40.00"
"05/15/2016","Desc2","-50.00"

Array 2  / File 2
"Date","Description","Amount"
"5/12/2016","Desc1","-40"
"5/15/2016","Desc2","-50"

如果仔细观察,记录是相同的,并且在使用比较对象时需要匹配。

那么,有没有一种方法可以将每个记录中的第一个对象转换为一个日期,将第三个对象转换为一个数字,在同一个或多个数组中。

我还可以忽略在投射时发现的任何错误(空日期或数字)。

谢谢!!

PS。专门寻找类似

 import-object file1.csv | for-each object { cast $_.Date as date, ignore errors, cast $_Amount as number, ignore errors }

【问题讨论】:

    标签: arrays csv powershell


    【解决方案1】:

    听起来您想利用 -as 运算符将数据转换为对象。

    Import-Csv 'File1.csv' | ForEach {
        [pscustomobject]@{
            Date = $_.Date -as [datetime]
            Description = $_.Description
            Amount = $_.Amount -as [int]
        }
    }
    

    这样做的好处是它在失败时不会抛出错误(但不会显示数据并且只是为 Null)。

    '06/07/2015' -as [datetime]
    'Wont Work' -as [datetime]
    
    10.00 -as [int]
    'Wont Work' -as [int]
    

    【讨论】:

    • 好的非常接近!!再多一个请求 - 我可以将它转换为精确到两位数的小数吗?问题是某些记录中有 50.00,当它们重复时,数量为 50..比较对象在比较小数时将这些视为不同.. 还是这样?检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    相关资源
    最近更新 更多