【问题标题】:Parsing imported CSV解析导入的 CSV
【发布时间】:2014-11-02 20:47:05
【问题描述】:

我正在尝试使用 Import-CSV 命令行开关解析 .csv 文件,如下所示:

$lease_import = ipcsv -Path 'C:\leases.csv'-Delimiter "," | where { 
        ($_.binding_state -ne "ABANDONED") -and ($_.mac_address -ne "") -and (($_.ends -replace "T"," " )-match "2014")
} 

此 CSV 中的一般“结束”字段如下所示:2014-01-23T13:49:38.000Z。我想用空格替换“T”,我想用空字符串替换.000Z。最后,破折号必须用 / 代替。最终结果必须是这样的:

2014/01/23 13:49:38

我尝试使用 -replace 将“T”更改为以下链接后的空格:http://blogs.technet.com/b/heyscriptingguy/archive/2011/03/21/use-powershell-to-replace-text-in-strings.aspx。但是,这对我不起作用。

我是否想一次做太多事情?

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    通过尝试从字符串中解析 DateTime 可能会有更优雅的解决方案,但一个非常简单的解决方案是

    ("2014-01-23T13:49:38.000Z".TrimEnd(".000Z") -Replace "T"," ") -replace "-","/"
    

    会返回

    2014/01/23 13:49:38
    

    在你的循环中,这看起来像

    ($_.ends.TrimEnd(".000Z") -Replace "T"," ") -replace "-","/"
    

    代替.TrimEnd(),您可以再做一个Replace,但既然TrimEnd 可以删除尾随字符,为什么不使用它。

    我确实尝试过使用[datetime]::ParseExact 之类的东西,但它们需要有干净的字符串而不是额外的数据,否则会出现解析错误。您可以像使用-replace 一样清理字符串,但是使用该函数就变得多余了。其他人可能有更清洁的方法

    【讨论】:

    • 很抱歉,它运行良好,但我对如何将其集成到 Import-CSV 中有点困惑。您指的是一个新的、不同的循环吗?
    • @Simplexity 你并没有真正说出你想做什么,所以我无法回答。你用这些数据做什么?
    • 我的错,我犯了一个明显的错误。最后一个问题;我将如何使用 TrimEnd() 删除最后 6 个字符(假设前两个字符是随机的)?
    • @Simplexity 该字符串中是否总是有句点?改变后的一切?
    • 我已经想通了 :) 使用 -replace 代替通配符。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2021-02-08
    • 2015-10-12
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多