【问题标题】:Convertfrom-string removes leading zerosConvertfrom-string 删除前导零
【发布时间】:2018-10-14 06:08:14
【问题描述】:

我在使用 Convertfrom-String cmdlet 时遇到问题

$value = 'something:009' 
$value | ConvertFrom-String -Delimiter ':'

输出:

P1        P2
--        --
something  9

我想要的输出是

P1        P2
--        --
something  009

有人有什么想法吗?

提前致谢。

【问题讨论】:

  • cmdlet 好像做了一些自动解析,009 变成了一个字节。 $value -split ':' 会这样做吗?
  • 您可以使用template variant 并在模板中分配类型(示例5)

标签: powershell text-parsing


【解决方案1】:

我建议完全避免使用ConvertFrom-String - 它执行的类型转换是您在使用-Delimiter 时无法控制的,正如您所经历的那样,它的示例驱动的基于模板的解析很尴尬。

附带说明:ConvertFrom-String 在跨平台 PowerShell Core edition 中不可用。

在您的简单情况下,请改用ConvertFrom-Csv

$value = 'something:009' 
$value | ConvertFrom-Csv -Delimiter ':' -Header P1, P2

ConvertFrom-Csv 将所有值按原样读取为字符串(使用字符串输入;删除字段值周围的双引号)。

【讨论】:

    【解决方案2】:

    mklement0 提出最佳解决方案。你也可以这样做:

    解决方案 1:使用简单拆分(您也不能使用正则表达式拆分)

    $value = 'something:009' 
    $values=$value -split ':'
    
    [pscustomobject]@{
    Val1=$values[0]
    Val2=$values[1]
    }
    

    解决方案 2:使用 ConvertFrom-String 和模板

    $template=@"
    {{Val1:Abc123}:{Val2:1}}
    "@
    
    $value = 'something:009' 
    $value | ConvertFrom-String -TemplateContent $template
    

    【讨论】:

    • 很高兴看到带有模板的工作示例,尽管您的特定示例字段值令人困惑:输入中的第一个字段没有数字,并使用 1 作为示例值第二个建议一个数字(或者,如果解释为一个字符串,则与009 不匹配,除了个数字组成),这里特别不需要 .然而,该命令确实有效——我觉得这很令人费解,这也是我远离ConvertFrom-String 的原因之一。请注意,在这种情况下,只需使用 x 作为示例值就足够了:{{Val1:x}:{Val2:x}}
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2010-09-26
    • 2018-08-13
    • 2021-08-10
    • 2015-11-22
    • 2018-06-16
    相关资源
    最近更新 更多