2015-07-08 3 views
1

Я пытаюсь выяснить способ чтения первой строки текста в .txt через excel VBA без открытия файла, что-то у меня возникло с ошибкой, поскольку все примеры Я видел, что так или иначе открывал .txt.Прочитать файл без открытия и удалить его

Кроме того, мне было интересно, есть ли у меня какой-либо способ получить код VBA для удаления указанного .txt установленного времени после того, как excel был закрыт ..., который я не слишком уверен, даже удаленно возможно (с VBA как минимум).

EDIT:

Упрощенный код выглядит следующим образом:

Option Explicit 
Public g_strVar As String 
Sub Test_Proc() 
    Dim row as Long   
    row = 2 

    Do While Cells(row, 1) <> "" 
     Cells(row, 2) = ImportVariable(Cells(row, 1)) 
     row = row + 1 
    Loop 

End Sub 
Function ImportVariable(strFile As String) As String 

    Open strFile For Input As #1 
    Line Input #1, ImportVariable 
    Close #1 

End Function 

Колонка 1 содержит расположение всех и каждого файла .txt, а на колонке рядом с ним я должен подробно, что первая строка текста для каждого файла. Проблема в том, что список был в пару раз примерно в 10K, и единственное место, о котором я могу думать, когда я могу улучшить время, которое требуется выполнить, - это «Открыть/закрыть», поскольку некоторые из этих файлов .txt имеют размер 12 000 КБ и немного открывают.

+2

Вы не можете запустить VBA в Excel, если она закрыта. Возможно, вы можете использовать VBScript через запланированную задачу. Почему вы не можете открыть текстовый файл? – Rory

+0

@Rory Потому что я хочу зацикливать его на многие файлы, и время, затрачиваемое на открытие/закрытие каждого из них, в конечном итоге накапливается в потраченные впустую минуты. Поскольку я не хочу редактировать данные, а просто извлекаю их, мне было интересно, можно ли просто сделать это без необходимости его открытия. –

+2

Вы не можете логически прочитать файл, не открывая его; возможно, если вы поделитесь своим прочитанным кодом и объясните, почему удаление файла может помочь в улучшении, можно предложить –

ответ

1

Это может быть быстрее, чем открытие каждого файла (читает первую строку из 18,5 Мб файла в 0.1953125 сек)


Option Explicit 

Dim cmdLine As Object 

Sub Test_Proc() 
    Dim i As Long, minRow As Long, maxRow As Long, rng1 As Range, rng2 As Range 
    Dim t As Double, ws As Worksheet, x As Variant, col1 As Variant, col2 As Variant 

    Set ws = ThisWorkbook.Worksheets(1) 
    minRow = 2 
    With ws 
     .Columns(2).Delete 
     maxRow = .UsedRange.Rows.Count 
     Set rng1 = .Range("A1:A" & maxRow) 
     Set rng2 = .Range("B1:B" & maxRow) 
    End With 
    col1 = rng1.Value2: col2 = rng2.Value2 
    Set cmdLine = CreateObject("WScript.Shell") 

    Application.ScreenUpdating = False 
    t = Timer 
    For i = minRow To maxRow 
     If Len(col1(i, 1)) > 0 Then 
      ws.Cells(i, 2).Value2 = Replace(ImportLine(col1(i, 1)), vbCrLf, vbNullString) 
     End If 
    Next 
    'rng2.Value2 = col2 
    Application.ScreenUpdating = True 
    InputBox "Duration: ", "Duration", Timer - t '18.5 Mb file in 0.1953125 sec 
End Sub 

Function ImportLine(ByVal strFile As String) As String 
    ImportLine = Replace(cmdLine.Exec(_ 
      "%comspec% /C FindStr /N . " & strFile & " | FindStr ^1:" _ 
     ).STDOut.ReadAll, "1:", vbNullString) 
End Function 

Немного вложенное, но он делает следующее:

  • CMD/C - открывает окно командной строки, затем закрывается по завершении
  • F indStr/N. C: \ test.txt - найдите любой символ и выведите строку с номером строки в формате «1:»
  • | FindStr^1: - перенаправить на другой FindStr, который использует regex, чтобы найти «1:» в начале строки
  • Когда командная строка завершена, верните результат функции Replace
  • Заменить удаляет «1:» и возвращает строка

Если ваши файлы могут содержать строку "1": где-то еще в первой строке

  • мы можем использовать функцию Right(): возвращает Right (выход, Len (выход) - 2)
  • o r мы можем использовать другую командную строку, которая группирует строки с помощью «[1]»:

    • Найти/N "" C: \ test.txt | Найти "[1]"
Смежные вопросы