2015-12-13 39 views
1

我有2個參數,第一個是文本文件,第二個是csv文件。使用csv數據替換文本

的第一個文件的樣子:

(name) from (address) is (age) years old. 

第二個文件的樣子:

Name,Address,Age 

James,London,34 

Alex,New York,25 

我要取代這個:(名)到詹姆斯(地址)(倫敦)和(歲)到34等等

我想這個輸出:James from London is 34 years old.等等

所以浩我可以將csv文件的數據存儲在多維數組中嗎? 喜歡這個$數據[行號] [列號] 例如,$數據[1] [0]應該是:亞歷

我的代碼:

$parameter = $args[0] 
$data = $args[1] 

for($i = 1; $i -lt $data.lenght/3; $i++) 
{ 
    $parameter.replace('(name)', '???') | Set-Content $parameter 
    $parameter.replace('(address)', '???') | Set-Content $parameter 
    $parameter.replace('(age)', '???') | Set-Content $parameter 
    #I want to output $parameter 

} 
+1

如果您使用'$ data = Import-CSV「pathtocsvfile.csv」',您將在'$ data [1] .Name'中使用'Alex',或在$ data [0]中使用'London'。地址「,會爲你工作嗎? – sodawillow

+0

如何輸出$參數? 寫主機不起作用 –

+0

我認爲你必須使用'return' – user4317867

回答

-1

嘗試導入-CSV

$data = "C:\Users\testuser\Desktop\test.csv" 

$list = Import-Csv $data 

$list 
$list[0].Name 
2

使用當前輸入文件,其中$template是您的字符串已經更換完成,$path是你的C源SV,我們可以做這樣的事情。

$template = Get-Content D:\temp\template.txt 
$path = "d:\temp\test.csv" 

$keys = ($template | Select-String "\(.*?\)" -AllMatches).Matches.Value 
ForEach($csvEntry in (Import-CSV $path)){ 
    $result = $template 
    $keys | ForEach-Object{ 
     $result = $result.Replace($_,$csvEntry."$($_.Trim("()"))") 
    } 
    $result 
} 

獲取$keys這些值是要替換的值,希望在CSV文件中具有匹配的值。在這種情況下,$keys@("(name)","(address)","(age)")。然後我們瀏覽CSV中的每一行,併爲每一行替換我們找到的每個鍵。然後簡單地通過$result作爲輸出。

James from London is 34 years old. 
Alex from New York is 25 years old. 

如果你有在你的模板文件控制,這可能是方便很多如果它是這樣的: 「{0}從{1} {2}歲。」這樣您就可以使用format operator並定位分配CSV值。

Import-CSV $path | ForEach-Object{$template -f $_.Name, $_.Address, $_.Age} 

使用較少代碼的結果相同。