【发布时间】:2016-01-21 04:46:14
【问题描述】:
假设我有一个包含 5 条记录的 csv 文件(实际上它大约是 80,000 条)。
CSV 文件:
column1,columnICareAbout,column2
someRandomValue,John Doe - Generic,someRandomValue
someRandomValue,Captain Teemo - pocketPet,someRandomValue
someRandomValue,Pinky Brain - Fictional,someRandomValue
someRandomValue,Miyamoto Musashi - swordsman,someRandomValue
someRandomValue,Kato yasunori - troubleMaker - Extreme,someRandomValue
给定以下代码:
注意:我知道数组值是正确的,我只需要知道如何在表达式中循环遍历数组。
$firstNames = @()
$firstNameCounter = 0
$lastNames = @()
$lastNameCounter = 0
Import-Csv $file1 |
foreach {
$firstNames += $_.Description.split(" ")[0]
$lastNames += $_.Description.split(" ")[1]
}
Import-Csv $file1 |
Select-Object *, @{n='First Name'; e={$firstNames[$firstNameCounter];$script:firstNameCounter++}}, @{n='Last Name'; e={$lastNames[$lastNameCounter];$script:lastNameCounter++}} |
Export-Csv "testresults.csv" -NoTypeInformation -Force
我每次只获取数组中的第一个元素。所以最终的结果文件是这样的
column1,columnICareAbout,column2,First Name,Last Name
someRandomValue,John Doe - Generic,someRandomValue,John,Doe
someRandomValue,Captain Teemo - pocketPet,someRandomValue,John,Doe
someRandomValue,Pinky Brain - Fictional,someRandomValue,John,Doe
someRandomValue,Miyamoto Musashi - swordsman,someRandomValue,John,Doe
someRandomValue,Kato yasunori - troubleMaker - Extreme,someRandomValue,John,Doe
我希望文件看起来像这样
column1,columnICareAbout,column2,First Name,Last Name
someRandomValue,John Doe - Generic,someRandomValue,John,Doe
someRandomValue,Captain Teemo - pocketPet,someRandomValue,Captain,Teemo
someRandomValue,Pinky Brain - Fictional,someRandomValue,Pinky,Brain
someRandomValue,Miyamoto Musashi - swordsman,someRandomValue,Miyamoto,Musashi
someRandomValue,Kato yasunori - troubleMaker - Extreme,someRandomValue,Kato,yasunori
谁能告诉我我做错了什么?
【问题讨论】:
-
为什么分两步做呢?
Import-CSV $File1 | Select *,@{l='First Name';e={$_.Description.Split(' ')[0]}},@{l='Last Name';e={$_.Description.Split(' ')[1]}} | Export-CSV testresults.csv -NoType -Force -
与其有第二个循环,不如在第一个循环中附加属性
$_ | Add-Member -MemberType NoteProperty -Name FirstName -Value $firstName -
感谢 TheMadTechnician。这行得通。虽然我仍然想知道如何在表达式期间迭代数组。这将帮助我解决我目前面临的问题。
-
@skukx 感谢您的回答,我也许可以在我面临的下一个问题上使用这个逻辑。