Powershell: извлечение даты и времени из строки (11/11/2020 11:23:45 Text2 12345) без использования регулярных выражений

#powershell

#powershell

Вопрос:

У меня есть текстовый файл

11/11/2020 11:23:45 Text2 12345

Текст 2020-11-25 11:23:46 12345

Я перебираю текстовый файл, и мне нужен вывод для строки 1 как 11/11/2020 11:23:45, указав формат даты как «ММ / дд / гггг ЧЧ: мм: сс», а для строки 2 как 2020-11-25 11:23:46, указав формат даты как «гггг-дд-ММЧЧ: мм: сс «

 $pattern = "MM/dd/yyyy HH:mm:ss"
$dateString = 11/11/2020 11:23:45 Text2 12345
$date = [datetime]::ParseExact($dateString,$date_format,$null)
  

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

Пожалуйста, помогите!!

Ответ №1:

Я предлагаю использовать switch оператор с параметрами -File and -Regex :

 # Sample input file.
$file = './sample.txt'

# Add sample data to the file.
@'
11/11/2020 11:23:45 Text2 12345
Text 2020-11-25 11:23:46 12345
'@ > $file

# Read the file line by line, and perform regex matching on each.
# Convert each match to a [datetime] instance by casting and output it.
switch -Regex -file $file {
  'bd{2}/d{2}/d{4} d{2}:d{2}:d{2}b' { # MM/dd/yyyy HH:mm:ss
    [datetime] $Matches[0]
  }
  'bd{4}-d{2}-d{2} d{2}:d{2}:d{2}b' { # yyyy-dd-MM HH:mm:ss
    [datetime] $Matches[0] 
  }
}
  

Обратите внимание, что оба формата в строках примера могут быть преобразованы напрямую [datetime] .
Если существуют дополнительные форматы, которые не могут, выполните ::ParseExact() вызов в соответствующих обработчиках ветвей.

Вышеуказанные результаты (в моей en-US системе):

 Wednesday, November 11, 2020 11:23:45 AM
Wednesday, November 25, 2020 11:23:46 AM
  

Ответ №2:

Сделайте это, разделив:

 (Get-Content "FILEPATH")|Foreach{
  $_.split(" ")[0..1] -join " "
}
  

Комментарии:

1. Привет, спасибо, и это работает, если дата находится в позициях 0 и 1, в этом случае дата может быть в любой другой позиции с любым заданным форматом.