Alterando o formato DateTime em vários arquivos CSV

1

Eu tenho vários arquivos csv com essa estrutura:

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

Eu preciso atualizar TODOS os arquivos csv com esse formato datetime:

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

Existe uma maneira inteligente / rápida de fazer isso? Eu tentei importá-los para o Excel, mas isso é uma tarefa individual [copiar / colar um por um], então eu suponho que não é a melhor maneira de fazer isso. Talvez algum recurso no Notepadd ++ [não conseguiu encontrá-lo]

Obrigado,

    
por D. Caan 31.08.2014 / 21:52

2 respostas

1

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. Itera cada arquivo em uma determinada pasta e filtra apenas arquivos CSV
  2. Leia em cada CSV e faça um loop por 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 PM em um objeto de data do PowerShell.
  5. Formate o objeto de data e grave-o de volta no array. [2] representa o terceiro valor / coluna porque começamos a contar a 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
por 03.09.2014 / 01:04
2

A maneira mais rápida seria escrever uma macro no VBA Excel que abre os arquivos csv, altera a formatação e a salva como arquivo csv novamente. Tente o seguinte curso de ação:

  • Gravar uma macro no Excel que faz exatamente esta tarefa para um arquivo csv (iniciar a gravação, abrir o arquivo, fazer a formatação e salvar o arquivo novamente).
  • Use esta resposta do SU para percorrer todos os arquivos em um diretório para fazer a tarefa que você acabou de criar. Você precisará da função Dir e de um loop While. / li>

Assim, 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
    
por 01.09.2014 / 08:57