2016-07-12 4 views
0

메모장 .csv 파일에서 텍스트를 편집하는 데 도움이 필요합니다. Excel 용 행이 너무 많은 큰 파일이 있습니다. 메모장에서 파일을 열고 메모장에서 파일의 처음 15 개 행을 제거한 다음 .txt 파일로 저장해야합니다. 가능한 경우이 매크로를 실행하는 데 필요한 여러 .csv 하위 폴더가있는 폴더를 선택하고 싶습니다. 처음 15 개의 줄에는 항상 같은 텍스트가 들어있는 것은 아닙니다. 누군가가 나를 도와 줄 수 있습니까?메모장에서 텍스트 편집

감사

+0

이것은 Excel과 어떤 관련이 있습니까? Excel이 어느 시점에서이 문제에 관여합니까? –

+1

배치 스크립트를 사용하여이 작업을 수행하는 것이 좋으면 http://stackoverflow.com/questions/11428692/batch-file-to-delete-first-3-lines-of-a-text-file을 참조하십시오. 또한 하위 폴더 내에 여러 파일을 처리하도록 향상시킵니다. –

+2

메모장에는 매크로 기능이 없습니다. 도구에 대한 가정없이 문제를 기술하고 시도한 내용을 설명하십시오. – Richard

답변

4

여기 (상관없이 그 라인의 내용) 텍스트 파일의 상단 선 (15)을 제거하는 방법의 일례이다. 한 번에 한 줄에서 작업 할 때 대용량 파일을 임의로 처리 할 수 ​​있어야합니다.

Sub removeTopLines() 

    Dim srcFile As String, nSrc As Integer ' source file (read from) 
    Dim dstFile As String, nDst As Integer ' destination file (write to) 
    Dim textLine As String 

    Const LINES_TO_SKIP = 15 
    Dim lineCounter As Long 

    srcFile = "c:\opt\src.txt" 
    dstFile = "c:\opt\dst.txt" 

    nSrc = FreeFile 
    Open srcFile For Input As #nSrc 

    nDst = FreeFile 
    Open dstFile For Output As #nDst 

    lineCounter = 1 
    Do Until EOF(nSrc) 
     Line Input #nSrc, textLine 
     If lineCounter > LINES_TO_SKIP Then 
      Print #nDst, textLine 
     End If 
     lineCounter = lineCounter + 1 
    Loop 

    Close #nDst 
    Close #nSrc 

End Sub 

당신은 how to traverse a directory tree here의 예를 볼 수있다, 또는 대안 당신은 모든 파일 경로 이름의 목록을 얻을 수 있으며, 한 번에 그것을 하나 개의 파일을주고 다른 루프에서이 절차를 호출합니다.

업데이트 : 다음은 줄 수 대신 "시간"이 포함 된 문자열을 찾아 그 이후의 줄만 복사하는 다른 버전입니다.

Sub removeTopLinesAfter() 

    Dim srcFile As String, nSrc As Integer ' source file (read from) 
    Dim dstFile As String, nDst As Integer ' destination file (write to) 
    Dim textLine As String, strAfter As String 

    strAfter = "time" 
    Dim copyLines As Boolean 

    srcFile = "c:\opt\src.txt" 
    dstFile = "c:\opt\dst.txt" 

    nSrc = FreeFile 
    Open srcFile For Input As #nSrc 

    nDst = FreeFile 
    Open dstFile For Output As #nDst 

    copyLines = False 
    Do Until EOF(nSrc) 
     Line Input #nSrc, textLine 
     If Not copyLines Then 
      copyLines = InStr(textLine, strAfter) > 0 
     Else 
      Print #nDst, textLine 
     End If 
    Loop 

    Close #nDst 
    Close #nSrc 

End Sub 
+0

안녕하세요 Logan, 이것은 내가 찾고있는 것입니다. 감사합니다 – Dan

+0

유일한 문제는 그의 csv 파일이 너무 커서 Excel을 열 수 없으므로 처리하는 데 오랜 시간이 걸릴 것입니다. @ [Jaganathan Nanthakumar] (http://stackoverflow.com/users/6077173/jaganathan-nanthakumar) 줄을 건너 뛰기 위해 배치 파일을 사용하면 시간이 많이 절약 될 것입니다. 실제로 VBA에 있어야하는 경우 배치 명령을 실행하기위한 wscript 셸을 만드는 것이 더 빠릅니다. – Tim

+0

어떻게 이것을 조정하여 상수 15 줄 대신 "시간"이라는 단어가 포함 된 줄이 LINES_TO_SKIP에 대한 내 값이 될 수 있습니까? "Time"이라는 단어는 – Dan

관련 문제