none
Powershell: Обработка даты из CSV RRS feed

  • Вопрос

  • Здравствуйте.

    Есть CSV-файл:

    test1;test2;mydate

    x;y;01-feb-2014

    z;a;01-mar-2015

    Мне надо обработать csv-файл таким образом, чтобы полученный из него csv не содержал строки с датой раньше сегодняшней. Для этого получаю дату из строки командой get-date.

    $today = get-date

    get-content C:\orig.csv | where { !((get-date -date $_.split(";")[2]) -lt $today)} | Set-Content -Encoding UTF8 C:\dst.csv


    Все работает как надо, за исключением того, что при обработке шапки сначала идет ругань, мол-не могу строку преобразовать "mydate" в System.date.time. И шапка в полученный csv не попадает. Как можно не обрабатывать 1ю строку csv или заставить код пропускать такие строки, где невозможно преобразовать в System.date.time?

    UPD: Нашел параметр -skip 1 у get-content, убирающий из обработки первую строку. Только как это поможет вставить шапку в целевой файл...



    • Изменено free-bsd 12 февраля 2015 г. 13:04
    12 февраля 2015 г. 12:51

Ответы

  • $today = (Get-Date).Date
    [datetime]$result = 0
    
    get-content C:\orig.csv | where { 
    	$date = $_.split(";")[2]
    	if([datetime]::TryParse($date,[ref]$result)) {(Get-Date $date) -ge $today}
    	else {$date}
    } | Set-Content -Encoding UTF8 C:\dst.csv

    • Предложено в качестве ответа Vector BCOModerator 12 февраля 2015 г. 13:18
    • Помечено в качестве ответа free-bsd 12 февраля 2015 г. 13:24
    12 февраля 2015 г. 13:12
    Отвечающий

Все ответы

  • $today = (Get-Date).Date
    [datetime]$result = 0
    
    get-content C:\orig.csv | where { 
    	$date = $_.split(";")[2]
    	if([datetime]::TryParse($date,[ref]$result)) {(Get-Date $date) -ge $today}
    	else {$date}
    } | Set-Content -Encoding UTF8 C:\dst.csv

    • Предложено в качестве ответа Vector BCOModerator 12 февраля 2015 г. 13:18
    • Помечено в качестве ответа free-bsd 12 февраля 2015 г. 13:24
    12 февраля 2015 г. 13:12
    Отвечающий
  • Спасибо, вот так менее изящно, но тоже работает:

    $today = get-date
    Get-Content C:\orig.csv | select -First 1 | Set-Content -Encoding UTF8 C:\dst.csv
    get-content C:\orig.csv | select -Skip 1 | where { !((get-date -date $_.split(";")[2]) -lt $today)} | Add-Content -Encoding UTF8 C:\dst.csv

    12 февраля 2015 г. 13:26