2013-08-13 3 views
0

~ 1500 개의 동일한 형식의 txt 파일 각각에서 한 줄의 텍스트를 추출하려고합니다. 그런 다음이 줄의 모든 값과 해당 날짜 (txt 파일 이름)를 csv 파일에 저장합니다.~ 1500 개의 동일한 형식의 txt 파일 각각에서 한 줄을 추출하고 csv 또는 xls에 값을 저장하는 방법은 무엇입니까?

DAILY AVG:  14.64   9.49   9.46   0.16  243.71 

내가 궁극적으로이처럼 보이는 XLS 파일 생성 바라고 :

Date  AVG1 AVG2 AVG3 AVG4 AVG5 
12-13-06 14.64 9.49 9.46 0.16 243.71 
를 파일이 txt 말했다에서

의 선 따라서 포맷 (위, 아래 및 데이터의 행이)

나는 grep이나 awk를 사용하는 것을 고려해 왔지만 솔직하게 어디에서 시작해야할지 모른다. 명령 줄 배치 절차가 가장 효과적인 공격 경로입니까? 원하는 최종 결과는이 일일 평균을 해당 날짜와 함께 Excel 스프레드 시트로 가져 오는 것입니다. excel의 import txt 옵션은 파일 단위로 작동하지만 문제는 여기에 txt에서 xls 파일로 1500 개의 개별 파일을 수동으로 가져 오는 데 걸리는 시간이 군대가없는 한 불가능하다는 것입니다.

모든 통찰력이나 방향은 크게 감사하겠습니다.

+0

날짜는 어디에서 유래됩니까? 파일 이름, '마지막으로 수정 한'스탬프? – JScoobyCed

+0

날짜는 파일 이름에서옵니다. 예 : '12 -13-06.txt ' – ptrckqnln

+1

귀하의 질문을 해결할 수 있기 때문에 답변으로 게시하지 않을 다양한 방법입니다. 옵션은 다음과 같습니다 : awk의 상사 인 경우 셸 스크립트 + awk :) 또는 [id | date | avg1 | ... | avg5] 데이터베이스의 파일을로드 (쉘 스크립트 루프를 통해) 한 다음 편안하다고 느끼는 프로그래밍 언어 필요에 따라 형식을 지정합니다. 아마 다른 옵션들 ... – JScoobyCed

답변

0

가정 :

Sub tgr() 

    Dim oShell As Object 
    Dim oFSO As Object 
    Dim arrData(1 To 65000) As String 
    Dim strFolderPath As String 
    Dim strFileName As String 
    Dim strText As String 
    Dim DataIndex As Long 
    Dim lAvgLoc As Long 

    Set oShell = CreateObject("Shell.Application") 
    On Error Resume Next 
    strFolderPath = oShell.BrowseForFolder(0, "Select a Folder", 0).Self.Path & Application.PathSeparator 
    Set oShell = Nothing 
    On Error GoTo 0 
    If Len(strFolderPath) = 0 Then Exit Sub 'Pressed cancel 

    Set oFSO = CreateObject("Scripting.FileSystemObject") 
    strFileName = Dir(strFolderPath & "*.txt*") 
    Do While Len(strFileName) > 0 
     strText = oFSO.OpenTextFile(strFolderPath & strFileName).ReadAll 
     lAvgLoc = InStr(1, strText, "Daily Avg", vbTextCompare) 
     If lAvgLoc > 0 Then 
      strText = Mid(strText, lAvgLoc) 
      strText = Trim(Mid(Replace(strText, vbCrLf, String(255, " ")), Evaluate("MIN(FIND({1,2,3,4,5,6,7,8,9,0},""" & strText & """&1234567890))"), 240)) 
      DataIndex = DataIndex + 1 
      arrData(DataIndex) = DateValue(Replace(strFileName, ".txt", vbNullString)) & vbTab & strText 
     End If 
     strFileName = Dir 
    Loop 

    If DataIndex > 0 Then 
     With Sheets.Add 
      .Range("A1:F1").Value = Array("DATE", "AVG1", "AVG2", "AVG3", "AVG4", "AVG5") 
      With .Range("A2").Resize(DataIndex) 
       .Value = Application.Transpose(arrData) 
       .TextToColumns .Cells, xlDelimited, xlTextQualifierDoubleQuote, Tab:=True 
       .NumberFormat = "mm-dd-yy" 
      End With 
      Application.DisplayAlerts = False 
      .SaveAs strFolderPath & "Daily Averages.csv", xlCSV 
      Application.DisplayAlerts = True 
     End With 
    End If 

    Set oFSO = Nothing 
    Erase arrData 

End Sub 

방법 : 모든 텍스트 파일이 같은 폴더에

  • 텍스트 파일에 있습니다

    • 탭이

    사용이 엑셀 VBA 코드를 구분하다 매크로 사용 :

    1. , 매크로는 항상 통합 문서의 사본에 새로운 코드를 실행
      • 에서 실행됩니다 통합 문서의 복사본을 만듭니다 단지의 경우 코드가이 코드 특히 사실이다
      • 원활하게 실행되지 않습니다 | 복사 된 통합 문서에서 아무것도
    2. , Alt + F11 키를 눌러 Visual Basic 편집기
    3. 삽입을 엽니 다 삭제 모듈
    4. 원하는 매크로를 두 번 클릭하여 실행 가능한 매크로의 목록을 가져 Visual Basic 편집기
    5. 엑셀, 보도 ALT + F8을 닫습니다 모듈에 제공된 코드를 복사하여 붙여 넣기 (I라는 이 하나의 tgr)
  • 0

    이 bash 쉘 스크립트를 사용할 수 있습니다. 파일이 현재 디렉토리에있는 모든 데이터를 가정

    #!/bin/sh 
    
    echo Date AVG1 AVG2 AVG3 AVG4 AVG5 > output.txt 
    for i in *.txt 
    do 
        STRING=${i%.txt} 
        DATA=`cat $i | tr -s ' ' | cut -d ' ' -f 3-` 
        echo $STRING $DATA >> output.txt 
    done 
    

    ,이 output.txt에서 원하는 출력을 넣어 것입니다. 그런 다음 이것을 Excel에로드 할 수 있습니다.