【问题标题】:Powershell Import-csv with return character带有返回字符的 Powershell Import-csv
【发布时间】:2016-11-07 21:55:26
【问题描述】:

我尝试通过利用 import-csv 将文本文件转换为文档,其中原始文档中的每个项目都是一个新行

示例文件.txt

James Cameron
Kirk Cobain
Linda Johnson

代码:

$array = import-csv file.txt | ConvertFrom-Csv -Delim `r

foreach ($Data in $array)
 {
    if (sls $Data Master.txt -quiet)
    {Add-Content file.txt $Data}
 }

它从未创建过文档

【问题讨论】:

  • "它从未创建过文档"。顿顿顿顿。太惊悚了。村民们有没有找到 James T. Kirk Cobain 的 HEADer?

标签: powershell import-csv


【解决方案1】:

Import-Csv 接受 CSV 并输出 PSCustomObjects。它适用于文件具有标题行的情况,并将其读取为对象的属性。例如

FirstName,LastName
James,Cameron
Kirk,Cobain

# ->

@{FirstName='James';LastName='Cameron'}
@{FirstName='Kirk';LastName='Cobain'}
etc.

如果您的文件没有标题行,它将占用第一行,然后破坏其他所有内容。您需要提供 -Header 'h1','h2',... 参数来解决此问题。所以你可以使用-Header Name,但是你的数据只有一个属性,所以没有太大的好处。

ConvertFrom-Csv 旨在做同样的事情,但来自变量而不是文件中的 CSV 数据。它们不会有用地链接在一起。它会尝试,但你最终得到的是......

单个对象,具有名为'@{James=Kirk}' 的属性和'@{James=Linda}' 的值,其中'James' 取自第1 行作为列标题,奇怪的语法来自强制这些对象通过第二次转换。

完全不清楚您为什么要从file.txt 阅读并添加到file.txt。但由于您没有 CSV,因此使用 CSV cmdlet 没有任何好处。

$lines = Get-Content file.txt
$master = Get-Content master.txt

foreach ($line in $lines)
{
    if ($master -contains $line)
    {
        Add-Content file2.txt $line
    }
}

或者只是

gc file.txt |? { sls $_ master.txt -quiet } | set-content file2.txt

从我的代码块自动生成的 PS 帮助链接(如果有):

  • gcGet-Content 的别名(在模块 Microsoft.PowerShell.Management 中)
  • ?Where-Object 的别名
  • slsSelect-String 的别名(在模块 Microsoft.PowerShell.Utility 中)
  • Set-Content(在模块Microsoft.PowerShell.Management

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2016-04-30
    • 2017-01-20
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多