2017-02-22 29 views
1

фонизвлечение строки из текстового файла

Я должен создать код в Excel VBA, который открывает текстовый файл и записывает определенную часть некоторых из ее строк, начинающаяся с «: 60F» в конкретную ячейку лист Excel.

Эта часть кода уже работает.

вопрос

Однако I'm борется со второй частью задачи. Мне нужно записать в другую ячейку документа Excel часть определенной строки, начинающуюся с «: 61:».

Проблема заключается в том, что в текстовом файле имеется много строк, начинающихся с «61:», но мне нужен тот, который возникает сразу после строки, начинающейся с «60F:».

Буду признателен, если вы поможете мне в этом. Заранее большое спасибо!

Сердечные приветы

Вот код, который я написал до сих пор:

код

Function extract_opening_balance(ByVal filename As String, subfield_61 As String) As String 

Dim i As Integer 
Dim pos1 As Integer 

strPath = ActiveWorkbook.Path & "\Data of Reporting Month\" 
filename = strPath & "MT940_T2_" & main_menu.cbo_Year & Left(main_menu.cbo_Month, 2) & Format(day(CDate(Right(main_menu.lst_Date.List(i), 10))), "00") & ".txt" 

Open filename For Input As #1 
    For i = 3 To 13 
     Do Until EOF(1) 
      Line Input #1, textline 

         If InStr(textline, ":60F:") > 0 Then 


        If InStr(textline, "EUR") = 13 And InStr(textline, 0) <> 16 Then 
         'For j = 1 To String(":60F:").Count 

          pos1 = InStr(subfield_61, "//") + 30 

          'time_str = Mid(subfield_61, pos1, 6) 
          'time_str = Mid(time_str, 1, 2) & ":" & Mid(time_str, 3, 2) & ":" & Mid(time_str, 5, 2) 

          Sheets("op_balance").Range("B" & i).Value = Mid(textline, 6, 1) 
          Sheets("op_balance").Range("C" & i).Value = Mid(textline, 16, 20) 
          Sheets("op_balance").Range("D" & i).Value = subfield_61 
          Sheets("op_balance").Range("E" & i).FormulaR1C1 = "=IF(RC[-3]=""D"",(-1)*RC[-2],RC[-2])" 


         'Next j 
        End If 
      End If 
     Loop 
    Next i 

End Function 
+1

Насколько велик текстовый файл? Можете ли вы предоставить краткий образец того, что было бы в нем? – Comintern

+0

[Ищет] (https://msdn.microsoft.com/en-us/library/7af2feyt (v = vs.90) .aspx), и вы должны [Найти] (https://msdn.microsoft.com/ru -us/library/office/ff839746.aspx) – abraxascarab

+0

Функция [InStr] (https://msdn.microsoft.com/en-us/library/8460tsh1.aspx) позволяет начать поиск. Запишите положение ': 60F' (возможно, длинное) и используйте его в качестве точки для начала поиска': 61: '. – Jeeped

ответ

0

Regexp вариант:

случайные вещи
случайный парень
Материал: 60F: материал
другой материал 61: подробнее getme
60F

возвращает буквенно-цифровые после 61: (предшествует : 60F:), т.е. getme в этом примере

Sub GetMe() 

Dim FSO As Object 
Dim FH As Object 
Dim objRegex As Object 
Dim objRegexMC As Object 
Dim strIn As String 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set FH = FSO.OpenTextFile("c:\temp\test.txt") 
Set objRegex = CreateObject("vbscript.regexp") 
strIn = FH.readall 
strIn = Replace(strIn, vbNewLine, Chr(32)) 

With objRegex 
    .Pattern = ":60F.*61:(\w+)" 
    If .Test(strIn) Then 
     Set objRegexMC = .Execute(strIn) 
     MsgBox objRegexMC(0).submatches(0) 
    Else 
     MsgBox "text not found" 
    End If 
End With 

End Sub 
+0

Большое спасибо, brettdj! Ты мне очень помог. – Eszter