如何使用PowerShell基于单个单元格将一行分隔为多行,该单元格在CSV文件的同一行中包含多个值

如何使用PowerShell基于单个单元格将一行分隔为多行,该单元格在CSV文件的同一行中包含多个值,csv,powershell,Csv,Powershell,我试图使用PowerShell循环浏览CSV文件的每一行,以基于分隔符(;)将行中的特定单元格分隔为多行。我的数据如下所示: ID Name Invoices Member Since 1 John A123;A234;C316 1999 2 Dave B219;C216 2010 3 Jim D213;E117;G214 2003 ID Name Invoices Member Since 1 John A123 1999 1 John A

我试图使用PowerShell循环浏览CSV文件的每一行,以基于分隔符(;)将行中的特定单元格分隔为多行。我的数据如下所示:

ID Name Invoices       Member Since 
1  John A123;A234;C316 1999 
2  Dave B219;C216      2010 
3  Jim  D213;E117;G214 2003
ID Name Invoices Member Since 
1  John A123     1999 
1  John A234     1999 
1  John C316     1999 
2  Dave B219     2010 
2  Dave C216     2010 
3  Jim  D213     2003 
3  Jim  E117     2003
3  Jim  G214     2003
我需要输出如下所示:

ID Name Invoices       Member Since 
1  John A123;A234;C316 1999 
2  Dave B219;C216      2010 
3  Jim  D213;E117;G214 2003
ID Name Invoices Member Since 
1  John A123     1999 
1  John A234     1999 
1  John C316     1999 
2  Dave B219     2010 
2  Dave C216     2010 
3  Jim  D213     2003 
3  Jim  E117     2003
3  Jim  G214     2003

最后,我需要将这个文件导出到一个新的CSV文件。任何帮助都将不胜感激。我已经对此进行了几个小时的研究,在寻找关于如何做到这一点的资源方面遇到了很多困难。提前感谢您的帮助。

只需迭代每一行,检索
发票,按
拆分即可
并使用当前值为每个对象创建一个新的
PSCustomObject

$x = Get-Content 'Path_to_your_csv'
$y = $x | ConvertFrom-Csv -Delimiter ' '
$y | Foreach {
    $current = $_
    $current.Invoices -split ';' | foreach  {
        [PSCUstomObject]@{
            ID = $current.ID
            Name  = $current.Name 
            Invoices  = $_
            Member  = $current.Member
            Since  = $current.Since
        }
    }
} | ConvertTo-Csv -NoTypeInformation -Delimiter ' ' | % {$_ -replace '"',''}
输出:

ID Name Invoices Member Since
1 John A123 1999 
1 John A234 1999 
1 John C316 1999 
2 Dave B219 2010 
2 Dave C216 2010 
3 Jim D213 2003 
3 Jim E117 2003 
3 Jim G214 2003 

注意:您可能希望采用分隔符(例如,使用制表符).

只需迭代每一行,检索
发票,按
拆分即可
并使用当前值为每个对象创建一个新的
PSCustomObject

$x = Get-Content 'Path_to_your_csv'
$y = $x | ConvertFrom-Csv -Delimiter ' '
$y | Foreach {
    $current = $_
    $current.Invoices -split ';' | foreach  {
        [PSCUstomObject]@{
            ID = $current.ID
            Name  = $current.Name 
            Invoices  = $_
            Member  = $current.Member
            Since  = $current.Since
        }
    }
} | ConvertTo-Csv -NoTypeInformation -Delimiter ' ' | % {$_ -replace '"',''}
输出:

ID Name Invoices Member Since
1 John A123 1999 
1 John A234 1999 
1 John C316 1999 
2 Dave B219 2010 
2 Dave C216 2010 
3 Jim D213 2003 
3 Jim E117 2003 
3 Jim G214 2003 

注意:您可能希望采用分隔符(例如,使用制表符).

Martin,当我为一个新项目回顾这一点时,我才意识到我从未感谢过您。我用这个答案解决了一些问题。再次感谢。马丁,当我为一个新项目提到这个时,我才意识到我从来没有感谢过你。我用这个答案解决了一些问题。再次感谢。