
이 구조의 CSV 파일이 여러 개 있습니다.
text, text, 01/27/2001 01:00:00 PM
이 날짜/시간 형식으로 모든 csv 파일을 업데이트해야 합니다.
text, text, 27-Jan-2001 13:00:00
이 작업을 수행하는 알려진 스마트하고 빠른 방법이 있습니까? Excel로 가져오려고 시도했지만 이는 개별 작업(하나씩 복사/붙여넣기)이므로 최선의 방법은 아닌 것 같습니다. 아마도 Notepadd++의 일부 기능을 찾을 수 없습니다.
감사해요,
답변1
다음은 특정 폴더의 여러 CSV 파일을 한 단계로 업데이트하는 PowerShell 스크립트입니다.
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]
세 번째 값/열을 의미합니다. 0부터 세기 시작하기 때문입니다. - 현재 행의 모든 값을 다시 결합하여 단일 문자열을 얻습니다. 쉼표를 구분 기호로 사용
- 모든 행을 단일 배열에 추가하면 모든 행을 한 번에 파일에 쓸 수 있습니다.
- 다음 CSV 파일로 진행
답변2
가장 빠른 방법은 VBA Excel에서 csv 파일을 열고 형식을 변경한 후 다시 csv 파일로 저장하는 매크로를 작성하는 것입니다. 다음 작업 과정을 시도해 보세요.
- Excel에서 매크로 기록그게 바로 이 작업을 수행하는 것입니다하나csv 파일(녹화를 시작하고 파일을 열고 포맷을 한 후 파일을 다시 저장합니다.)
- 사용SU의 이 답변방금 생성한 작업을 수행하기 위해 디렉터리의 모든 파일을 탐색합니다. 당신은디렉토리 기능그리고 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