
Tenho vários arquivos csv com esta estrutura:
text, text, 01/27/2001 01:00:00 PM
Preciso atualizar TODOS os arquivos csv com este formato de data e hora:
text, text, 27-Jan-2001 13:00:00
Existe uma maneira inteligente/rápida conhecida de fazer isso? Tentei importá-los para o Excel, mas é uma tarefa individual [copiar/colar um por um], então suponho que não seja a melhor maneira de fazer isso. Talvez algum recurso no Notepadd++ [não foi possível encontrá-lo]
Obrigado,
Responder1
Aqui está um script do PowerShell para atualizar vários arquivos CSV de uma pasta específica em uma única etapa.
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
}
O que faz
- Itere cada arquivo em uma determinada pasta e filtre apenas arquivos CSV
- Leia cada CSV e percorra cada linha
- Divida cada linha em uma matriz. A vírgula é nosso delimitador
- Converta a string de data, por exemplo,
01/27/2001 01:00:00 PM
em um objeto de data do PowerShell. - Formate o objeto de data e grave-o novamente no array.
[2]
representa o terceiro valor/coluna porque começamos a contar em zero - Junte todos os valores da linha atual para obter uma única string. Use vírgula como delimitador
- Adicione todas as linhas a um único array para que possamos escrevê-las todas de uma vez em um arquivo
- Prossiga com o próximo arquivo CSV
Responder2
A maneira mais rápida seria escrever uma macro em VBA Excel que abra os arquivos csv, altere a formatação e salve-os novamente como arquivo csv. Experimente o seguinte curso de ação:
- Grave uma macro no Excelque faz exatamente essa tarefa paraumcsv (inicie a gravação, abra o arquivo, faça a formatação e salve o arquivo novamente).
- Usaresta resposta de SUpara percorrer todos os arquivos em um diretório para executar a tarefa que você acabou de criar. Você precisará doFunção diretórioe um loop While.
Então seu código ficará assim (não testado!):
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