2016-07-12 6 views
0

Мне нужна помощь в редактировании текста в файле CSV-файла. У меня большой файл с слишком большим количеством строк для Excel. Мне нужно открыть файл в «Блокноте», удалить первые 15 строк файла в «Блокноте» и сохранить его как .txt-файл. Если возможно, я хотел бы иметь возможность выбрать папку с подпапками, которые содержат несколько CSV, которые мне нужно для запуска этого макроса. Первые 15 строк не всегда содержат один и тот же текст. Может ли кто-нибудь помочь мне с этим?Редактирование текста в блокноте

Благодаря

+0

Как это связано с преимуществом? В какой момент 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

Hi Logan, Это именно то, что я искал. Спасибо – Dan

+0

Единственная проблема заключается в том, что его файл csv слишком велик для открытия Excel, поэтому для обработки потребуется очень много времени. @ [Jaganathan Nanthakumar] (http://stackoverflow.com/users/6077173/jaganathan-nanthakumar) предложение об использовании пакетного файла для пропусков линий позволит сэкономить массу времени. Если это действительно должно быть в VBA, все равно будет быстрее создать оболочку wscript для запуска командных команд. – Tim

+0

Как бы отрегулировать это так, чтобы вместо постоянных 15 строк линия, включающая слово «время», была бы моей стоимостью для LINES_TO_SKIP? Слово «Время» появляется только один раз в файле – Dan

Смежные вопросы