2016-11-07 50 views
0

我嘗試以下通過利用進口CSV打開一個文本文件到一個文檔,其中原始文檔中的每個項目是一個新行Powershell的導入,CSV,返回字符

樣品file.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} 
} 

它從未創建的文檔

+0

「*它從來沒有創建的文檔*」。敦敦敦南。太嚇人了。村民們有沒有找到James T. Kirk Cobain的HEADer? – TessellatingHeckler

回答

0

Import-Csv需要CSV並輸出PSCustomObject s。它用於文件有標題行時,並將其作爲對象的屬性讀取。例如

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}',其中'詹姆斯'是從第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幫助鏈接: