【问题标题】:Removing spaces from specific columns of pipe seperated file从管道分隔文件的特定列中删除空格
【发布时间】:2017-11-02 15:38:36
【问题描述】:

我正在尝试从管道分隔文件的第 15 列和第 16 列中删除空格。

我在网上搜索后尝试了这篇文章底部的代码,但它失败了

您不能在空值表达式上调用方法。在线:19 字符:2 + $.h15=$.h15.ToString().Replace(' ','') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

您不能在空值表达式上调用方法。在线:20 字符:5 + $.h16=$.h16.ToString().Replace(' ','') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNul

我从那猜想,它没有读入数据,但我不明白为什么不读。我检查了变量,它们是正确的。

$header = 1..42 | ForEach-Object { "h$_" }
$dialler_out_path="$dialler_file_dir\$output_file"

$dialler_path="$dialler_file_dir\$dialler_file"

(Import-Csv -Delimiter '|' -Header $header -Path $dialler_path | %{ 
    $_.h15=$_.h15.ToString().Replace(' ','')
    $_.h16=$_.h16.ToString().Replace(' ','')
}) | export-csv $dialler_out_path -NoType

【问题讨论】:

  • 问题似乎是您试图对空对象执行 ToString,而是尝试执行处理空值的 Convert.ToString
  • 试试:(Import-Csv -Delimiter '|' -Header $header -Path $dialler_path | ? {$_} | %{...
  • 这仍然给出空值异常。我刚刚添加了一个额外的管道和代码? {$_} 如上所述,但仍然出错。不幸的是,我无法发布任何示例数据来提供帮助,因为它很敏感

标签: powershell csv import-csv


【解决方案1】:

处理空对象的另一种方式(除了cmets):

$_.h15 = (-join ($_.h15)).ToString().Replace(' ','')

你应该在 foreach 中产生输出:

(Import-Csv -Delimiter '|' -Header $header -Path $dialler_path | %{ 
$_.h15 = (-join ($_.h15)).ToString().Replace(' ','')
$_.h16 = (-join ($_.h16)).ToString().Replace(' ','')

$_

}) | export-csv $dialler_out_path -NoType

【讨论】:

  • 这没有抛出任何错误但是输出文件是空的。
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多