How to export to “non-standard” CSV with Powershell

后端 未结 1 775
一生所求
一生所求 2021-01-27 08:53

I need to convert a file with this format:

2015.03.27,09:00,1.08764,1.08827,1.08535,1.08747,8941 2015.03.27,10:00,1.08745,1.08893,1.08604,1.08762,7558

相关标签:
1条回答
  • 2021-01-27 09:02

    Ok, this could be one massive one-liner... I'm going to do line breaks at the pipes for sanity reasons though.

    Import-Csv in.csv -header Date,Time,O,H,L,C,V|select * -ExcludeProperty time|
        %{$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_}|
        ConvertTo-Csv -NoTypeInformation|
        select -skip 1|
        %{$_ -replace '"'}|
        Set-Content out.csv -encoding ascii
    

    Basically I import the CSV, exclude the time column, convert the date column to an actual [datetime] object and then convert it back in the desired format. Then I pass the modified object (with the newly formatted date) down the pipe to ConvertTo-CSV, and skip the first line (your headers that you don't want), and then remove the quotes from it, and lastly output to file with Set-Content (faster than Out-File)

    Edit: Just saw your update... to do that we'll just change the last column to 1 at the same time we modify the date column by adding $_.v=1;...

            %{$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_.v=1;$_}|
    

    Whole script modified:

    Import-Csv in.csv -header Date,Time,O,H,L,C,V|select * -ExcludeProperty time|
        %{$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_.v=1;$_}|
        ConvertTo-Csv -NoTypeInformation|
        select -skip 1|
        %{$_ -replace '"'}|
        Set-Content out.csv -encoding ascii
    

    Oh, and this has the added benefit of not having to read the file in, write the file to the drive, read that file in, and then write the file to the drive again.

    0 讨论(0)
提交回复
热议问题