여러 CSV 파일에서 DateTime 형식 변경

여러 CSV 파일에서 DateTime 형식 변경

이 구조의 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           
    }

기능

  1. 특정 폴더의 각 파일을 반복하고 CSV 파일만 필터링합니다.
  2. 각 CSV를 읽고 각 줄을 반복합니다.
  3. 각 줄을 배열로 나눕니다. 쉼표는 구분 기호입니다.
  4. 날짜 문자열을 01/27/2001 01:00:00 PMPowerShell 날짜 개체로 변환합니다.
  5. 날짜 객체의 형식을 지정하고 배열에 다시 씁니다. [2]세 번째 값/열을 의미합니다. 0부터 세기 시작하기 때문입니다.
  6. 현재 행의 모든 ​​값을 다시 결합하여 단일 문자열을 얻습니다. 쉼표를 구분 기호로 사용
  7. 모든 행을 단일 배열에 추가하면 모든 행을 한 번에 파일에 쓸 수 있습니다.
  8. 다음 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

관련 정보