У меня большой текстовый файл с 2k плюс строки.Код на данный момент ищет определенные теги и помещает их в столбец.В теге Значение Дата создает новую строку.
Одна из вещей: у меня есть тег AMT и до тех пор, пока код не создаст новую строку, AMT перезаписывается другим значением AMT .Единственный способ избежать этого - каким-то образом загрузить в память 2 строки текста и на основе предыдущего значения напечатать или нет следующее значение.
Я мог бы принять код для ввода текстового файла и вывода с помощью AMT исправлено, а затем запустите приведенный ниже код.
Sub OpenFilesConvertTexttoCOL()
Dim MyFolder As String
Dim MyFile As String
Dim textline As String
MyFolder = "C:\Folder\"
MyFile = Dir(MyFolder & "\*.txt")
Dim filename As String
Dim currentrow As Long: currentrow = 2
Do While MyFile <> "" 'This will go through all files in the directory, "Dir() returns an empty string at the end of the list
filename = MyFolder & "\" & MyFile 'concatinates directory and filename
Open filename For Input As #1
Do Until EOF(1) 'reads the file Line by line
Line Input #1, textline
'text = text & textline
If (textline = " ") Or _
(textline Like "*Amount: Cur:*") Then 'error handler, if line was empty, ignore
Else
Dim splitline() As String
splitline() = Split(textline, ": ", -1, vbTextCompare)
' because of how my specific text was formatted, this splits the line into 2 strings. The Tag is in the first element, the data in the second
If IsError(splitline(0)) Then
splitline(0) = ""
End If
Select Case Trim(splitline(0)) 'removes whitespace
Case "Currency"
'currentrow = currentrow + 1 'files that didn't have a description row, resulted in empty rows in the spreadsheet.
ActiveSheet.Range("A" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(1)), " ")(0) '= splitline(1) ,= Trim(splitline(1)), " ")
Case "Value Date"
ActiveSheet.Range("B" & currentrow).Cells(1, 1).Value = Trim(Right(splitline(1), 42)) 'Trim(Right(splitline(1), 42))
currentrow = currentrow + 1 'files that didn't have a description row, resulted in empty rows in the spreadsheet.
Case "Reffor the A O"
ActiveSheet.Range("C" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(1)), " ")(0)
Case "Amt"
ActiveSheet.Range("D" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(1)), " ")(0)
Case "Ref"
ActiveSheet.Range("E" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(1)), " ")(0)
Case "DCM"
ActiveSheet.Range("F" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(2)), " ")(0)
Case "NO. TR"
ActiveSheet.Range("H" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(1)), "VOR")(0)
Case "Id Code"
ActiveSheet.Range("I" & currentrow).Cells(1, 1).Value = Split(Trim(splitline(1)), " ")(0)
Case "ZGR"
ActiveSheet.Range("K" & currentrow).Cells(1, 1).Value = Trim(splitline(1))
'Case "Supplementary Details"
'ActiveSheet.Range("L" & currentrow).Cells(1, 1).Value = splitline(1)
'...etc. etc... so on for each "tag"
End Select
'different Separators
splitline() = Split(textline, "XXX-", -1, vbTextCompare)
Select Case Trim(splitline(0))
Case "YOUR REF "
ActiveSheet.Range("G" & currentrow).Cells(1, 1).Value = Trim(splitline(1))
End Select
splitline() = Split(textline, "-ZAHLUNG", -1, vbTextCompare)
Select Case Trim(splitline(0))
Case "/REMI/AUSLANDS"
ActiveSheet.Range("J" & currentrow).Cells(1, 1).Value = Trim(splitline(1))
End Select
End If
Loop
Close #1
MyFile = Dir() 'reads filename of next file in directory
Loop
End Sub
Если необходимо, я могу поместить шаблон моего TXT-файла, но из-за конфиденциальности данных это может занять некоторое время.очистите файл.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: Мой пример TXT:
enter code here
Block 3
Block 4
F20: T R N
F25: A I - A
F28C: St Number/Se Number
Statement Number: 00109
Sequence Number: /002
F60M: O B - D/C - Date - Cur - Amt
DCMark: D/C Mark: C
Date: 180606 2000 Apr 01
Currency: EUR EURO
Amt: 21489135,63 #21489135,63#
F61: SSLL
Value Date: 180606 2000 Apr 01
DCM: Debit/Credit Mark: C
Amt: 694,88 #694,88#
Transaction Type: N
Id Code: TRF
Reffor the A O: 43000180606Z9257
Ref: //034542452450
Supplementary Details:
F86: info22
/BENM//GT2543534534534 aaa aaaa
/ORDP/aaaa aaa aaaaa 8/18
/REMI/UBERWEISUNG OUR REF: 034564654456
YOUR REF: 43000180606Z9257 S103 FAV Y/ddsdsXXX
ZGR: HHFHD SFOI DNNDS AGT: EUR 694,88
/AT934300030233977005 BIC:VBOEATWWXXX
F61: SSLL
Value Date: 180606 2000 Apr 01
DCM: Debit/Credit Mark: C
Amt: 2000,00 #2000,00#
Transaction Type: N
Id Code: TRF
Reffor the A O: 3801920873
Ref: //03GT180606136336
Supplementary Details:
/TGDFD/EUR2000,00/
F86: info1
/BENM//GT39FEMA16126000011201000470400 S-K, HA
/ORDP/
/REMI/UIS OUR REF: 03GT180606136336
YOUR REF: 3801920873 S103 FAV Y/ddsdsXXX
ZGR: /RFB/WITHDRAWAL AGT: EUR 2.000,00
F61: SSLL
Value Date: 180606 2000 Apr 01
DCM: Debit/Credit Mark: C
Amt: 2845,00 #2845,00#
Transaction Type: N
Id Code: TRF
Reffor the A O: FTT7681198 01
Ref: //014454154564
Supplementary Details:
/GTF/EUR2845,00/
F86: info22
//ewrewtweqterqyfrgdfgaddfag
/343253256346456/gfdgadfgasdadf
/REMI/UBERWEISUNG OUR REF: 180606192446
YOUR REF: 4354356346
ZGR: /fdgafg/3464363434 AGT: EUR 2.845,00
F62M: C B - D/C - Date - Currency - Amt
DCMark: D/C Mark: C
Date: 180606 2000 Apr 01
Currency: EUR EURO
Amt: 354543634 #54654656#
Block 5
Если вы поместите код, примененный к верхнему тексту, вы получите строку 5 excel: AMT 354543634 вместо 2845,00 .Это происходит потому, что AMT перезаписывается и для меня нецелесообразно, чтобы эта функция EOF игнорировала строку, основанную на предыдущей строке.Строка «F **:» всегда одна и та же, поэтому, если я смогу обратиться к этой строке, чтобы игнорировать числа X строк, это разрешит мою ситуацию.
Любое другое предложение обойтись принято, включая другое программное обеспечение для извлеченияданные.
Большое спасибо за помощь в будущем.
Происхождение моего кода из другой ссылки источника