複数の CSV ファイルで DateTime 形式を変更する

複数の CSV ファイルで DateTime 形式を変更する

この構造の 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           
    }

何をするのか

  1. 指定されたフォルダ内の各ファイルを反復処理し、CSV ファイルのみをフィルタリングします。
  2. 各CSVを読み込み、各行をループする
  3. 各行を配列に分割します。カンマが区切り文字です。
  4. 日付文字列を01/27/2001 01:00:00 PMPowerShell の日付オブジェクトに変換します。
  5. 日付オブジェクトをフォーマットし、配列に書き戻します。3[2]番目の値/列を表します。ゼロからカウントを開始するためです。
  6. 現在の行のすべての値を結合して単一の文字列を取得します。区切り文字としてカンマを使用します。
  7. すべての行を1つの配列に追加して、一度にファイルに書き込むことができます。
  8. 次の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

関連情報