首页 > 解决方案 > Powershell - 使用 ConvertFrom-csv

问题描述

我是 Powershell 的新手。我有一个包含逗号分隔值的变量。我想要做的是读取 csv 字符串变量中的每个条目,并将其分配给一个变量。我正在使用 ConvertFrom-csv 将数据与标题分开。

如何将每个值分配给一个变量,或者更好的是,使用 ConvertTo-csv 创建一个新的 csv 字符串,例如其中只有 2/3/6/7 列?

我最终想将该数据写入一个新的 csv 文件。

这是我的测试代码:

#Setup the variable
$Data = "test1,test2,test3,1234,5678,1/1/2021,12/31/2021" 
 
$Data | ConvertFrom-csv -Header Header1,Header2, Header3, Header4, Header5, Header6, Header7
 
# Verify that an object has been created.
$Data | 
    ConvertFrom-csv -Header Header1,Header2, Header3, Header4, Header5, Header6, Header7 |
    Get-Member


#Show header1
    Write-Host "--------Value from $Data----------------------------------------"
    $Data[0]   #doesn't work, only displays the first character of the string
    Write-Host "-----------------------------------------------------------------"


标签: powershellcsv

解决方案


如何将每个值分配给一个变量,或者更好地ConvertTo-Csv用于创建一个新的 csv 字符串,例如,其中只有2/3/6/7列?

这是自动化的一种方法:

# Define the CSV without headers
$Data = "test1,test2,test3,1234,5678,1/1/2021,12/31/2021"

# Set the number of headers needed
$headers = $Data.Split(',') | ForEach-Object -Begin { $i = 1 } -Process {
    "Header$i"; $i++
}

# Set the desired columns we want
$desiredColumns = 2,3,6,7 | ForEach-Object { $_ - 1 } | ForEach-Object {
    $headers[$_]
}

# Convert to CSV and filter by Desired Columns
$Data | ConvertFrom-Csv -Header $headers | Select-Object $desiredColumns

结果

Header2 Header3 Header6  Header7   
------- ------- -------  -------   
test2   test3   1/1/2021 12/31/2021

结果为 CSV

$Data | ConvertFrom-Csv -Header $headers |
Select-Object $desiredColumns | ConvertTo-Csv -NoTypeInformation

"Header2","Header3","Header6","Header7"
"test2","test3","1/1/2021","12/31/2021"

推荐阅读