【问题标题】:Powershell Sorting CSV FilePowershell 对 CSV 文件进行排序
【发布时间】:2014-05-27 11:58:44
【问题描述】:

我有以下代码:

$script:DatabaseFile = "C:\NewFolder\test.csv"

[string[]]$database = Get-Content -Path $script:DatabaseFile
[Collections.Generic.List[String]]$script:Database = $database

$script:Database | Out-File $script:DatabaseFile -Encoding ascii
$databaseAsCsvObject = Import-Csv $script:DatabaseFile
$databaseAsCsvObject | sort "Release Group","Email Address" | Export-Csv $script:DatabaseFile

$script:DatabaseFile 包含以下内容:

Release Group,Email Address,Template ID,Time
CDP.HLO.1,test@test.com,Template1,02:00
EDP.HLO.1,test1@test1.com,Template2,03:00

这成功地根据前两列对 csv 文件进行排序。

如何编写等效代码而无需保存文件,然后将其导入为 csv? 我可以将$script:Database 作为“CSV”对象,然后对其进行排序,然后仅将其写入文件一次吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:
    $script:Database = @(
    [pscustomobject]@{"Release group"="EDP.HLO.1";"Email Address"="test1@test1.com";"Template ID"="Template2";"time"="03:00"},
    [pscustomobject]@{"release group"="CDP.HLO.1";"Email Address"="test@test.com";"Template ID"="Template1";"time"="02:00"})
    
    $sorted = $script:Database | Sort-Object "Release Group", "Email Address"
    
    $script:DatabaseFile = "C:\data\test.csv"
    $sorted | Export-csv -NoTypeInformation -Path $script:DatabaseFile
    

    好的,所以我已经完全重写了我的第一个答案。首先创建带有所需标题的自定义对象。根据需要创建尽可能多的条目。对对象进行排序,然后导出到 csv :)

    【讨论】:

    • 嗨,感谢您的精彩回答,我什至不知道您能做到这一点!我已经稍微编辑了我的问题,如果我已经给了我一个 List[string] 怎么办,我是否必须将它转换为自定义对象数组?如果是这样,那么保存文件然后像我最初做的那样将其导入为 csv 真的会更容易吗?
    • 我想这取决于 List[string] 是如何给你的?您是否像您的代码所建议的那样从C:\newFolder\test.csv 拉出?如果您是,则不必创建任何自定义对象,只需 import-csv。您能否举例说明您从何处提取原始数据?即什么格式
    • 查看我编辑的帖子。虽然它不是很优雅,但我认为只写入文件,然后将该文件导入为 csv,然后排序,然后再次写入文件更有效。否则我假设我需要使用 for 循环为 csv 文件中的每一行创建自定义对象。
    • 没错,你需要一个 for 循环。但是从您那里的代码中,您从C:\newfolder\test.csv 中读取以获取您的值吗?你为什么不直接使用import-csv 而不是get-content
    • 因为在我读取文件 (get-content) 之后,我需要添加它,所以我使用 get-content 以便能够将其视为 List[String] 所以我可以很容易地添加到它。我可以添加到从 import-csv 返回的对象吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2017-06-23
    • 1970-01-01
    • 2021-09-08
    • 2015-12-24
    • 2018-12-17
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多