好的,我会尽力解释这个问题 - 我正在解析导入到excel的.txt文件 - 解析的.txt文件都有静态字段(有时) - 将来这些字段可能会改变,也可能不是静态的,因此下面的代码会解析相当粗糙的东西
问题:
1.假设将来这些字符串值可以改变(即" CUSTOMER NAME:"更改为DISTRIBUTOR NAME :)
一个。有没有办法我可以操作数据到我只需要建立字符串的名称,并跳过必须根据字符长度建立文本中的字符串的位置? (即不使用Mid(text,act + 6,9))
如果是这样,我该怎么做呢?文本文件中的某些行有1,2或3个字段(即SOME INDICATOR :, NO STATUS :,AUTO RENEW:..有三个字段值,而第一行有一个,第二行有两个。我猜一种方法这样做是为了建立字符串的名称,以便所述字符串和下一个字符串之间的每个字段都是字符串字段值,即:
ACCOUNT OPEN:(string 1) 05/10/15(string 1 value) ACT TYPE:(string 2) PREMIUM (string value 2)
简而言之,我试图找到一种方法,使我可以使这个解析器“智能化”。可以这么说。虽然对于客户记录的第一部分使用以下方法没什么大不了的,但实际上每条记录都有额外的屏幕(大型机)。还有其他屏幕与库存,订单号等其他东西有关。所以你可以看到这可能会成为一项庞大而繁琐的工作。我不介意花几个月来绘制每个领域的地图,我认为这是必要的更多工作,所以任何输入都将非常感谢我如何做到这一点。
此外,我的下面代码无法完全运行。它正确导入了文本文件的第一个记录,但是重复了excel中其余行的精确记录(即帐户:ABCDEF12在excel中重复100行而不是记录列表。每个新记录从下面开始20行以前的)。我假设我的循环结构错了?有什么想法吗?有关如何使以下代码的自动调整部分更有效的任何想法?目前,我的代码需要花费多长时间来解析,修剪,清理和自动调整,以及如何缩短它的想法?
Dim myFile As String
Dim text As String
Dim textline As String
Dim cstAct as integer
Dim actOpe as integer
Dim cusNam as integer
Dim act as integer
Dim reg as integer
myFile = "put file patch to text file here"
myFile = Application.GetOpenFilename()
Do Until EOF(1)
Line Input #1, textline
text = text & textline
Loop
cusAct = InStr(text, "ACCOUNT ")
actOpe = InStr(text, "ACCOUNT OPEN:")
reg = InStr(text, "REGION:")
cusNam = InStr(text, "CUSTOMER NAME:")
For i = 2 To ThisWorkbook.Worksheets("b2").Range("a65536").End(xlUp).Row
ThisWorkbook.Worksheets("name").Range("a" & i).Value = Mid(text, act + 6, 9)
ThisWorkbook.Worksheets("name").Range("b" & i).Value = Mid(text, cstAct + 6, 9)
ThisWorkbook.Worksheets("name").Range("c" & i).Value = Mid(text, actOpe + 13, 27)
ThisWorkbook.Worksheets("name").Range("d" & i).Value = Mid(text, cusNam + 20, 19)
next i
'here I format and autofit the cells
For x = 2 To ThisWorkbook.Worksheets("b2").Range("a65536").End(xlUp).Row
Range("a" & x).Value = Application.WorksheetFunction.Clean(trim(Range("a" & x)))
Range("b" & x).Value = Application.WorksheetFunction.Clean(trim(Range("b" & x)))
Range("c" & x).Value = Application.WorksheetFunction.Clean(trim(Range("c" & x)))
'etc etc
next x
'解析后导入到Excel中的文本文件
ACCOUNT ABCDEF12
ACCOUNT OPEN: 05/10/15 ACT TYPE: PREMIUM
CUSTOMER NAME: JOHN B. SMITH CSA REP: 154983
CUSTOMER ADDRESS: 123 SOMEWHERE DRIVE SOMETHING HERE:
LAST ORDER: 06/24/2011 COUNTRY CODE: UNITED STATES
INVOICE #: 123456789 STATE CODE: CALIFORNIA
LAST MAINTENANCE: 01/02/15 COUNTY CODE: UNCODED
SOME INDICATOR: NO COMPLAINTS: NO IPM IND: DATAPREP/PERF4
SOME INDICATOR: NO STATUS: NONE AUTO RENEW: YES
SOMETHING HERE: NO
SOMETHING HERE: ABC IND:
SOMETHING HERE: 2 ABC ASSET NO: T
.......留下TXT文件重复...只是不同的记录......
ACCOUNT ZXYFDG13
ACCOUNT OPEN: 05/10/15 ACT TYPE: PREMIUM
CUSTOMER NAME: JANE B. SMITH CSA REP: 154983
CUSTOMER ADDRESS: 123 SOMEWHERE DRIVE SOMETHING HERE:
LAST ORDER: 06/24/2011 COUNTRY CODE: UNITED STATES
INVOICE #: 123456789 STATE CODE: CALIFORNIA
LAST MAINTENANCE: 01/02/15 COUNTY CODE: UNCODED
SOME INDICATOR: NO COMPLAINTS: NO IPM IND: DATAPREP/PERF4
SOME INDICATOR: NO STATUS: NONE AUTO RENEW: YES
SOMETHING HERE: NO
SOMETHING HERE: ABC IND: NO
SOMETHING HERE: 2 REGION: NE
.....记录无限期地继续.........