Найти смежные строки CSV, временные метки которых превышают заданную продолжительность - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть файл со следующим:

"BatchID","BatchName","JobName","ScannerID","DateCreated","DailyCounter"
"12713","9001","fst100","09                  ","2/6/2020 6:21:06 AM","1"
"12714","9002","fst100","09                  ","2/6/2020 6:21:42 AM","2"
"12715","9003","fst100","09                  ","2/6/2020 6:21:58 AM","3"
"12716","9004","fst100","09                  ","2/6/2020 6:22:13 AM","4"
"12717","9005","fst100","09                  ","2/6/2020 6:22:30 AM","5"
"12718","9006","fst100","09                  ","2/6/2020 6:24:54 AM","6"
"12719","9007","fst100","09                  ","2/6/2020 6:25:12 AM","7"
"12720","9008","fst100","09                  ","2/6/2020 6:55:11 AM","8"
"12721","9009","fst100","09                  ","2/6/2020 6:55:27 AM","9"

Я хочу сравнить созданные поля даты и записать в файл те строки, которые находятся на расстоянии 15 минут или более.

1 Ответ

2 голосов
/ 07 февраля 2020

Так как:

  • ваши строки меток времени имеют формат, который распознается как есть, когда вы приводите их к [datetime] (System.DateTime) ( если в вашем формате не указан день вместо месяца),

  • вы можете напрямую вычесть два [datetime] экземпляра, чтобы получить экземпляр [timespan] (System.TimeSpan), свойство .TotalMinutes которого вы можете запросить

, решение довольно простое:

$prevRow = $null
Import-Csv in.csv | ForEach-Object { # Parse the CSV rows into objects and process each
  if ($prevRow -and ([datetime] $_.DateCreated - [datetime] $prevRow.DateCreated).TotalMinutes -gt 15) {
    # Output the previous row and the current row.
    $prevRow; $_
  }
  $prevRow = $_
} # | Export-Csv -NoTypeInformation -Encoding Utf8 out.csv

Выше будет напечатано соответствующие строки на экран; удалите # для экспорта в (другой) CSV-файл.

Примечание. Как написано, вы можете получить дублирующихся строк в выводе, а именно, если в соседнем строки AB C и A и B и B и C с интервалом более 15 минут, в этом случае выводится ABB C.

Ссылки на документацию:

...