我有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
}
答案 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