2013-01-17 3 views
2

Я пытаюсь прочитать текстовый файл с 1147 строками. Код ниже - только строки 1050-1147. Моя цель - прочитать весь файл и вытащить конкретные значения, расположенные на разных строках, для использования в скрипте. Примером может служить значение 2 из строки, содержащей «BlockList: 2». Я включил фрагмент формата текстового файла, поскольку он отформатирован иначе, чем любой пример, с которым я столкнулся (строки 1116-1128); Значения, которые я пытаюсь получить, имеют отступ, аналогичный показанной первой строке (не уверен, что это важно).VBA текстовый файл для чтения/поиска

fixation.OffsetTime: 426611 
    *** LogFrame End *** 
Level: 2 
*** LogFrame Start *** 
Procedure: TestProc 
BlockList: 2 
BlockList.Cycle: 1 
BlockList.Sample: 2 
Running: BlockList 
*** LogFrame End *** 

Уровень: 1 * Начало * логико-структурная схема Эксперимент: ChoiceofLotteries_fMRI_I

код до сих пор:

Sub OpenTextFileTest() 
    Const ForReading = 1, ForWriting = 2, ForAppending = 3 
    Dim fs, f, contents, var1 
    Set fs = CreateObject("Scripting.FileSystemObject") 
    Set f = fs.OpenTextFile("C:\NameOfFile.txt", 1) 
    contents = f.ReadAll 
    f.Close 
    Debug.Print contents 
End Sub 

Кто-нибудь есть какие-либо предложения, как это сделать?

ответ

1

Попробуйте это (пример того, как извлечь значение BlockList:)

Sub Sample() 
    Dim MyData As String, strData() As String 
    Dim i As Long 

    '~~> Replace this with the relevant file 
    Open "C:\NameOfFile.txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 

    For i = LBound(strData) To UBound(strData) 
     If InStr(1, strData(i), "BlockList:", vbTextCompare) Then 
      Debug.Print Split(strData(i), ":")(1) 
      Exit For 
     End If 
    Next i 
End Sub 

Followup

Текстового файл, который у вас есть Unicode текста файл и, следовательно, вы получаете, что проблема. Если вы делаете SaveAs, а затем выберите ANSI в кодировке, а затем выполните приведенный выше код, это сработает?

Нажмите here для альтернативного способа reading txt files using VBA

+0

Hi Сиддхарта, спасибо за быстрый ответ. Я запустил скрипт и ничего не отобразил в ближайшем окне на строку Debug.Print Split (strData (i), ":") (1). Я включил строку Debug.Print MyData после строки Get # 1, MyData, и кажется, что она все еще только чтение строк 1050-1147. Другая проблема тоже пришла в голову. Имя BlockList будет заголовком, если это файл excel, а значения под заголовками изменяются в текстовом файле. Я пытаюсь выяснить, как получить, скажем, значение blocklist value, blocklist value two и т. Д. – matt

+0

Действительно ли данные разделены линией? Есть ли вероятность увидеть txt-файл? –

+0

Также перед этой строкой 'Debug.Print Split (strData (i),": ") (1)' put this line 'Debug.Print strData (i)' Вы получаете что-нибудь? –

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