1

У меня есть несколько CSV-файлов с этой структурой:

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

Мне нужно обновить ВСЕ CSV-файлы с этим форматом даты и времени:

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

Есть ли известный умный / быстрый способ сделать это? Я попытался импортировать их в Excel, но это отдельная задача [копировать / вставить по одному], поэтому я полагаю, что это не лучший способ сделать это. Может быть, какая-то функция в Notepadd++ [не смогла найти]

Спасибо,

2 ответа2

2

Самый быстрый способ - написать макрос в VBA Excel, который открывает файлы csv, изменяет форматирование и снова сохраняет его как файл csv. Попробуйте следующий курс действий:

  • Запишите макрос в Excel, который выполняет именно эту задачу для одного CSV-файла (начните запись, откройте файл, выполните форматирование и снова сохраните файл).
  • Используйте этот ответ SU, чтобы просмотреть все файлы в каталоге, чтобы выполнить задачу, которую вы только что создали. Вам понадобится функция Dir и цикл While.

Таким образом, ваш код будет выглядеть так (не проверено!):

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
1

Вот скрипт PowerShell для обновления нескольких CSV-файлов из определенной папки за один шаг.

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           
    }

Что оно делает

  1. Итерация по каждому файлу в данной папке и фильтрация только по CSV-файлам
  2. Читайте в каждом CSV и просматривайте каждую строку
  3. Разделите каждую строку в массив. Запятая наш разделитель
  4. Преобразуйте строку даты, например, 01/27/2001 01:00:00 PM в объект даты PowerShell.
  5. Отформатируйте объект даты и запишите его обратно в массив. [2] обозначает третье значение / столбец, потому что мы начинаем считать с нуля
  6. Соедините все значения текущей строки, чтобы получить единственную строку. Используйте запятую в качестве разделителя
  7. Добавьте все строки в один массив, чтобы мы могли записать их все сразу в файл
  8. Продолжить со следующим CSV-файлом

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .