Alterando o formato DateTime em vários arquivos CSV

Alterando o formato DateTime em vários arquivos CSV

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

  1. Itere cada arquivo em uma determinada pasta e filtre apenas arquivos CSV
  2. Leia cada CSV e percorra cada linha
  3. Divida cada linha em uma matriz. A vírgula é nosso delimitador
  4. Converta a string de data, por exemplo, 01/27/2001 01:00:00 PMem um objeto de data do PowerShell.
  5. Formate o objeto de data e grave-o novamente no array. [2]representa o terceiro valor/coluna porque começamos a contar em zero
  6. Junte todos os valores da linha atual para obter uma única string. Use vírgula como delimitador
  7. Adicione todas as linhas a um único array para que possamos escrevê-las todas de uma vez em um arquivo
  8. 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

informação relacionada