使用csv数据替换文本

时间:2015-12-13 15:57:38

标签: arrays powershell multidimensional-array split

我有2个参数,第一个是文本文件,第二个是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文件的数据存储在多维数组中呢? 喜欢这个$ data [行号] [列号] 例如,$ data [1] [0]应为:Alex

我的代码:

$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

}

2 个答案:

答案 0 :(得分:2)

使用您当前的输入文件,其中$template是您的字符串以完成替换并且$path是您的源CSV,我们可以执行以下操作。

$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.

如果您可以控制模板文件,那么可以更容易 如果它看起来像这样:"来自{1}的{0}是{2}岁。&# 34 ;.这样您就可以使用format operator并在位置上分配CSV值。

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

相同的结果,代码更少。

答案 1 :(得分:-1)

尝试使用Import-Csv

实施例

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

$list = Import-Csv $data

$list
$list[0].Name