2015-02-06 2 views
0

Binary доступа чтения найти определенную строку

Sub ReadEntireFileAndPlaceOnWorksheet() 
 
    Dim X As Long, FileNum As Long, TotalFile As String, FileName As String, Result As Variant, Lines() As String 
 
    FileName = "C:\Users\Mohamed samatar.DSSE-EMEA\Documents\EQVL\Test\WHVP113_140910_TTinsug_TT_299Data_PUoff_WOT-TakeOff_NotKickDown_gearD_FelLambda.dat" 
 
    FileNum = FreeFile 
 
    Open FileName For Binary As #FileNum 
 
    TotalFile = Space(LOF(FileNum)) 
 
    Get #FileNum, , TotalFile 
 
    Close #FileNum 
 
    Lines = Split(TotalFile, vbNewLine) 
 
    ReDim Result(1 To UBound(Lines) + 1, 1 To 1) 
 
    For X = 1 To UBound(Result) 
 
    Result(X, 1) = Lines(X - 1) 
 
    Next 
 
    Range("A1").Resize(UBound(Result)) = Result 
 
End Sub​

У меня есть некоторые файлы в формате .dat, эти файлы содержат ценную информацию, однако они могут быть довольно большими, пытаясь открыть каждый файл в блокноте и извлечение информация, в которой я нуждаюсь, неэффективна вообще, так как она занимает много времени, чтобы открыть каждый файл. Я столкнулся с этой функцией двоичного доступа, которая, по-видимому, открывает большие файлы и позволяет вам быстро их прочитать. Мне было интересно, как найти/получить конкретные строки информации, можете ли вы использовать аналогичную функцию, чтобы сказать функцию поиска, или есть другой способ получить информацию, это то, что у меня есть до сих пор. Все, что он делает, это сказать мне тип файла, по сути, я хочу, чтобы иметь возможность искать конкретное строковое значение, или Если бы я мог просто сбрасывать весь текст в EXCEL и сортировать там, то любое руководство полезно.

+0

Check [Здесь] (HTTP: // bytes.com/topic/access/insights/953655-vba-standard-text-file-io-statements) для основных функций ввода-вывода, вы можете прочитать файл по строкам, а затем использовать основные строковые функции или RegEx, чтобы найти данные, которые вы ищете, или прочитать весь файл в массиве и повторить его и т. д. –

+0

Спасибо за быстрый ответ, посмотрим! – Samatar

+0

Привет, Дэвид, вы можете указать мне в правильном направлении, я только что прошел через документ и, возможно, пример чтения файла в массив? Если я получу его для чтения в массив, я могу свалить его в excel и выполнить поиск там, где у меня есть немного больше опыта. Мало смысла мало. Благодаря? – Samatar

ответ

2

Вот два примера. Первый из них читает каждую строку в файл и печатает на листе, начиная с ячейки A1, а затем вплоть до А2, А3 и т.д., по одному на каждой строке :

Option Explicit 
Sub testReadLine() 
    Dim filename As String 
    Dim FF As Integer 
    Dim line As String 
    Dim i as Long 

    filename = "C:\yourfilename.txt" '### MODIFY AS NEEDED 

    FF = FreeFile 
    Open filename For Input As FF 
    Do While Not EOF(FF) 
     Line Input #FF, line 

     Range("A1").Offset(i).Value = i 
     i = i + 1 
    Loop 
    Close FF 

End Sub 

второй пример читает весь файл в строчную переменную, а затем используйте функцию Split для преобразования этой строки в массив строки на основе разделителя строк (предполагается, что это vbCRLF).

Это один должен быть быстрее, и, конечно же, как только у вас есть данные в Excel можно использовать обычную функциональность первенствовать как «Найти» и т.д.

Option Explicit 
Option Base 0 
Sub testReadAll() 

    Dim filename As String 
    Dim FF As Integer 
    Dim text As String 
    Dim buffer As Long 
    Dim txtArray() As String 

    filename = "C:\yourfilename.txt" '### MODIFY AS NEEDED 

    FF = FreeFile 
    Open filename For Input As FF 
    buffer = LOF(FF) 
    text = Input(buffer, FF) 
    Close FF 

    'Put the text into an array, split by the LineFeed character: 
    txtArray = Split(text, vbCrLf) 

    'Print to the worksheet: 
    Range("A1").Resize(Ubound(txtArray)).Value = Application.Transpose(txtArray) 

End Sub 
+0

Большое спасибо за ответ, его только что выдающие номера, я должен был объяснить, что формат файла - это .dat-файл, и я видел некоторые места, где мне, возможно, нужно сделать преобразование из двоичного в обычный текст? это так, как он читается, поскольку он просто выводит числа от 0 до 4, хотя в файле содержится около 17 МБ данных? – Samatar

+0

Это звучит как новый вопрос, но есть функции преобразования строк, которые могут преобразовать массив байтов в строку и т. Д. Извините, но здесь полночь, и я не собираюсь принимать последующие вопросы на настоящее время. Задайте новый вопрос, чтобы другие могли помочь вам. –

+0

это может быть полезно: https://msdn.microsoft.com/en-us/library/office/gg264628%28v=office.15%29.aspx –