
У меня есть несколько CSV-файлов со следующей структурой:
text, text, 01/27/2001 01:00:00 PM
Мне нужно обновить ВСЕ CSV-файлы, используя следующий формат даты и времени:
text, text, 27-Jan-2001 13:00:00
Есть ли известный умный/быстрый способ сделать это? Я пробовал импортировать их в Excel, но это индивидуальная задача [копировать/вставить по одному], так что я полагаю, что это не лучший способ сделать это. Может быть, какая-то функция в Notepadd++ [не смог найти]
Спасибо,
решение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
}
Что оно делает
- Просматривать каждый файл в указанной папке и фильтровать только файлы CSV
- Прочитайте каждый CSV-файл и просмотрите каждую строку.
- Разделить каждую строку на массив. Запятая — наш разделитель
- Преобразуйте строку даты, например,
01/27/2001 01:00:00 PM
в объект даты PowerShell. - Отформатируйте объект даты и запишите его обратно в массив.
[2]
обозначает третье значение/столбец, поскольку мы начинаем отсчет с нуля. - Объедините все значения текущей строки, чтобы получить одну строку. Используйте запятую в качестве разделителя
- Добавьте все строки в один массив, чтобы мы могли записать их все одновременно в файл.
- Перейти к следующему CSV-файлу
решение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