【问题标题】:trim object contents in csv import在 csv 导入中修剪对象内容
【发布时间】:2013-06-19 00:06:49
【问题描述】:

我需要对从 csv 导入对象中提取的每个值运行一个 trim 方法。还没有尝试过类似下面的方法,但对我来说,我不想在传递给函数的每个变量的末尾定义一个修剪命令。

$csvobj = "c:\somestuff.csv"

foreach ($csvitem in $csvobj) {
$csvitem.value1.trim()
$csvitem.value2.trim()
}

提前致谢,SS

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这将修剪 csv 文件中的所有值并将结果分配给 $csv。

    $csv = Import-Csv c:\somestuff.csv | Foreach-Object {
       $_.PSObject.Properties | Foreach-Object {$_.Value = $_.Value.Trim()}  
    }
    

    【讨论】:

    • 我@Shay Levy 为什么你又提出同样的答案? ;o)
    • 在不认为它是一样的。我没有测试你的答案,但我认为你过于复杂了。
    • 谢谢你们。尽管两者具有相似的语法,但格式速记方法各不相同。
    • 此代码似乎不适用于我在 powershell 4.0 中。如果我将导入分配给变量 1st 然后像这样遍历它,它确实有效:$csv = Import-Csv c:\somestuff.csv $csv | Foreach-Object { $_.PSObject.Properties | Foreach-Object {$_.Value = $_.Value.Trim()} }
    【解决方案2】:

    你可以试试这个:

    $a = import-csv "c:\somestuff.csv"
    $a | % {$b=$_;$_.psobject.Properties | % {$c=$_.name ;$b."$c"=($b."$c").trim()}}
    

    首先:我将所有行导入$a

    Second :在第一个循环中,我读取每个对象(每个 CSV 行),然后在第二个循环中读取每个对象的每个属性,然后我可以修剪每个 var。

    【讨论】:

      【解决方案3】:

      这是对上述已接受答案的轻微修改。这会从当前文件夹中的所有 .csv 文件中删除所有前导/尾随空格。希望对您有所帮助!

      gci -filter *.csv | foreach {
          echo $_.NAME
          $csv = Import-Csv $_.NAME
          $csv | Foreach-Object {   
              $_.PSObject.Properties | Foreach-Object { $_.Value = $_.Value.Trim() } 
          }
          $csv | Export-Csv $_.NAME -NoTypeInformation 
      }
      

      【讨论】:

        猜你喜欢
        • 2021-07-16
        • 1970-01-01
        • 2018-07-04
        • 1970-01-01
        • 2016-09-20
        • 1970-01-01
        • 2010-12-05
        • 2013-10-25
        • 1970-01-01
        相关资源
        最近更新 更多