
この構造の csv ファイルが複数あります:
text, text, 01/27/2001 01:00:00 PM
すべての csv ファイルを次の日時形式で更新する必要があります:
text, text, 27-Jan-2001 13:00:00
これをスマートに素早く行う方法は何かありますか? Excel にインポートしようとしましたが、これは個別のタスク (1 つずつコピー/貼り付け) なので、最善の方法ではないと思います。Notepadd++ の機能かもしれません (見つけられませんでした)
ありがとう、
答え1
特定のフォルダーから複数の CSV ファイルを 1 つの手順で更新する PowerShell スクリプトを次に示します。
ForEach ($file in Get-ChildItem "C:\myFolder" -filter "*.csv"){
Get-Content $file.Fullname | ForEach {
$arLine = $_ -split ","
$date = [DateTime]$arLine[2]
$arLine[2] = $date.ToString(" dd-MMM-yyyy HH:mm:ss")
[array]$arFile += $arLine -join ","
}
$arFile | Out-File $file.Fullname
clear-variable arFile
}
何をするのか
- 指定されたフォルダ内の各ファイルを反復処理し、CSV ファイルのみをフィルタリングします。
- 各CSVを読み込み、各行をループする
- 各行を配列に分割します。カンマが区切り文字です。
- 日付文字列を
01/27/2001 01:00:00 PM
PowerShell の日付オブジェクトに変換します。 - 日付オブジェクトをフォーマットし、配列に書き戻します。3
[2]
番目の値/列を表します。ゼロからカウントを開始するためです。 - 現在の行のすべての値を結合して単一の文字列を取得します。区切り文字としてカンマを使用します。
- すべての行を1つの配列に追加して、一度にファイルに書き込むことができます。
- 次のCSVファイルに進む
答え2
最も簡単な方法は、CSV ファイルを開いて書式を変更し、再度 CSV ファイルとして保存するマクロを VBA Excel で記述することです。次の操作を試してください。
- Excelでマクロを記録するまさにこのタスクを実行する1つcsv ファイル (記録を開始し、ファイルを開いてフォーマットし、ファイルを再度保存します)。
- 使用SUのこの答え作成したタスクを実行するために、ディレクトリ内のすべてのファイルをスキャンします。Dir関数そしてWhileループ。
コードは次のようになります(未検証!):
Public Sub ChangeDates()
Dim StrFile as String
strFile = Dir("C:\Some\Location\Of\Your\Files\*.csv")
While strFile <> ""
# Append the stuff from the recorded macro here and adjust the filename
# Probably something like:
Workbooks.Open Filename:=strFile
Columns("C:C").Select
Selection.NumberFormat = "dd-mm-yyyy HH:mm:ss" # or something else
ActiveWorkbook.Save
ActiveWorkbook.Close
strFile = Dir
End While
End Sub