handle.exe
から出力される数多くの.txtファイルが数日間あります。私はそれをリレーショナルデータベースに取得するためにデータを再編成する必要があります。私が最初にやるべきことは、日付を再フォーマットすることです。.txtファイルに多数の日付を再フォーマットする(それぞれ異なる)
各ファイルの日付は800を超えており、ファイル全体に不均一に分散しています。日付は
June 29, 2016 12:05:45 PM
となり、06-29-16 12:05:45
が必要です。
私はちょうど1つのファイルで作業しています。ダイヤルインを行うために、元の日付の配列を使用して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]
おそらくはるかに簡単、よりエレガントな解決策があります。しかし、どんな助けや方向性も素晴らしいでしょう。
PS v5をインストールしてみてください - Convert-FromString http://www.powershellmagazine.com/2014/09/09/using-the-convertfrom-string-cmdlet-to-parse-structured-text/ – Kiran
Kiran ...ありがとう先端のために。しかし、実際に4.0でこれを行う方法はありませんか?ハッシュテーブルは機能しませんか?私は近くにいるようですが、私が求めている結果を追い出すために最終的な調整をすることはできません。 – Charlie