
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
- Iterar a través de cada archivo en una carpeta determinada y filtrar solo por archivos CSV
- Lea cada CSV y recorra cada línea
- Divida cada línea en una matriz. La coma es nuestro delimitador.
- Convierta la cadena de fecha, por ejemplo,
01/27/2001 01:00:00 PM
en un objeto de fecha de PowerShell. - Formatee el objeto de fecha y escríbalo nuevamente en la matriz.
[2]
representa el tercer valor/columna porque comenzamos a contar en cero - Vuelva a unir todos los valores de la línea actual para obtener una sola cadena. Usar coma como delimitador
- Agregue todas las líneas a una sola matriz para que podamos escribirlas todas a la vez en un archivo
- 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:
- Grabar una macro en Excelque hace exactamente esta tarea paraunoarchivo csv (comience a grabar, abra el archivo, formatee y guarde el archivo nuevamente).
- Usaresta respuesta de SUpara recorrer todos los archivos en un directorio para realizar la tarea que acaba de crear. Necesitarás elfunción de directorioy un bucle While.
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