我有很多.txt文件,这些文件是从几天的handle.exe
运行输出的。我需要重新组织数据以使其进入关系数据库。我需要做的第一件事是重新格式化日期。
每个文件都有超过800个日期,在整个文件中分配不均匀。日期格式为:
June 29, 2016 12:05:45 PM
我需要06-29-16 12:05:45
。
我现在正在处理单个文件,以便拨打内容。我已尝试使用Get-Date
原位替换日期(使用原始日期的数组)无处可去。然后我尝试了-replace
,但是没有用。
我已经花了3到4天的时间,我觉得我已经坏了。我已经尝试过很多我不知道的东西的排列。
我尝试的最后一件事就是下面。尝试使用哈希表,表中包含旧日期和新日期。
##To set "|" as separator for arrays
$OFS = '|'
##To get original dates into array
$a = @(sls .\hp.txt -pattern '(june 29|june 30|july 1|july 2|july 3|july 4)' | select -ExpandProperty line)
##To get dates with corrected format into array
$b = @($a | foreach {$_ | Get-Date -Format "MM-dd-yy hh:mm:ss"})
##To get old and new dates into hash table
$dates = @{$a = $b}
##To bring in content from file
$file = (Get-Content C:\hp.txt)
##To replace "NAME" with "VALUE" from hash table into file
foreach ($d in $dates) {
$file = $file -replace $d.Name, $d.Value
}
##To save corrected file with new file name
Set-Content -Path C:\hpnew.txt -Value $file
$a
数组包含(小部分):
June 29, 2016 12:04:51 PM June 29, 2016 12:05:58 PM June 29, 2016 12:07:00 PM [NOTE: LOTS MORE DATES HERE] June 30, 2016 12:01:17 AM June 30, 2016 12:02:19 AM June 30, 2016 12:04:22 AM [NOTE:CONTINUING TO END]
$b
数组包含:
06-29-16 12:04:51 06-29-16 12:05:58 06-29-16 12:07:00 [NOTE: LOTS MORE DATES ] 06-30-16 12:01:17 06-30-16 12:02:19 06-30-16 12:04:22 [NOTE: CONTINUING TO END]
可能有更简单,更优雅的解决方案。但任何帮助/方向都会很棒。
答案 0 :(得分:1)
使用正则表达式从文本中提取日期字符串,然后将匹配项传递给回调函数,其中parse将它们设置为实际DateTime
值,并将format根据您的值要求:
$re = '((?:january|february|...|december) \d{1,2}, \d{4} \d{1,2}:\d{2}:\d{2} [ap]m)'
$input_fmt = 'MMMM d, yyyy h:mm:ss tt'
$output_fmt = 'MM-dd-yy HH:mm:ss'
$culture = [Globalization.CultureInfo]::InvariantCulture
$options = [Text.RegularExpressions.RegexOptions]::IgnoreCase
$callback = {
[DateTime]::ParseExact($args[0].Groups[1].Value, $input_fmt, $culture).ToString($output_fmt)
}
$txt = Get-Content '.\hp.txt' -Raw
[regex]::Replace($txt, $re, $callback, $options) | Set-Content '.\hpnew.txt'