Cambiar el formato DateTime en múltiples archivos CSV

Cambiar el formato DateTime en múltiples archivos CSV

Tengo varios archivos csv con esta estructura:

text, text, 01/27/2001 01:00:00 PM

Necesito actualizar TODOS los archivos csv con este formato de fecha y hora:

text, text, 27-Jan-2001 13:00:00

¿Existe alguna forma inteligente/rápida conocida de hacer esto? Intenté importarlos a Excel, pero es una tarea individual [copiar y pegar uno por uno], así que supongo que no es la mejor manera de hacerlo. Quizás alguna función en Notepadd++ [no pude encontrarla]

Gracias,

Respuesta1

Aquí hay un script de PowerShell para actualizar varios archivos CSV de una carpeta específica en un solo paso.

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           
    }

Que hace

  1. Iterar a través de cada archivo en una carpeta determinada y filtrar solo por archivos CSV
  2. Lea cada CSV y recorra cada línea
  3. Divida cada línea en una matriz. La coma es nuestro delimitador.
  4. Convierta la cadena de fecha, por ejemplo, 01/27/2001 01:00:00 PMen un objeto de fecha de PowerShell.
  5. Formatee el objeto de fecha y escríbalo nuevamente en la matriz. [2]representa el tercer valor/columna porque comenzamos a contar en cero
  6. Vuelva a unir todos los valores de la línea actual para obtener una sola cadena. Usar coma como delimitador
  7. Agregue todas las líneas a una sola matriz para que podamos escribirlas todas a la vez en un archivo
  8. Continuar con el siguiente archivo CSV

Respuesta2

La forma más rápida sería escribir una macro en VBA Excel que abra los archivos csv, cambie el formato y los guarde nuevamente como archivo csv. Pruebe el siguiente curso de acción:

Entonces tu código se verá así (¡no probado!):

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

información relacionada