我想解析文本文件的下面部分,以便将“DVA”下的增量数字作为我确定的一系列单元格放入一列。我想对第二列中以S开头的序列号执行相同的操作,也在我确定的范围内。它们之间有一个|
分隔符,我希望DAU SNo.-C0
成为我搜索的字符串。
我在想:搜索DAU SNo.-C0
,然后以某种方式跳过两行并将下面的内容复制到Excel中,将数据解析为两列并确定应放入的单元格范围。
DAU SNo.-C0
+-------------------------+
|DVA| 0 |
+-------------------------+
| 0 | S1050360701270 |
| 1 | S1050344701369 |
| 2 | S1050360701315 |
| 3 | S1021360701337 |
| 4 | S1050360701367 |
| 5 | S1050332701350 |
| 6 | S1050360701584 |
+-------------------------+
这就是我所拥有的:更新
Do While i < UBound(strAll)
If (InStr(1, strAll(i), "DAU SNo.-C0", vbTextCompare) > 0) Then
i = i + 4 'Skip 4 lines to get to first SN
Do Until InStr(1, strAll(i), "+", vbTextCompare) > 0 'Loop until line includes "+"
strSNO = Split(strAll(i), "|", -1, vbTextCompare)
'put strSNO into next cell in column A
i = i + 1
Loop
End If
i = i + 1
Loop
Next
我已尝试过将分割字符串放入列中的下一个单元格的几种方法,但我无法使其工作。除了实际复制值之外的所有单词(注释在代码中)。我通过打印strSNO(1)和strSNO(2)验证了其余的工作。
任何指示,解释或代码都会有所帮助。
答案 0 :(得分:0)
找到该行后,使用VBA Split
函数,使用|
作为分隔符。它将字符串拆分为数组。
示例:如果您这样做:
strTest = Split(">| 0 | S1050360701270", "|", -1, vbTextCompare)
它会像strTest(1) = 0
,strTest(2) = S1050360701270
一样出现。
您可能还想使用strAll = Split(objReadFile.ReadAll, vbCrLf, -1, vbTextCompare)
将整个文本文件首先放入VBA(有时更快),然后使用整数变量来处理每一行 - 这意味着您可以跳过几行找到“DAU SNo.-C0”字符串,而不是必须阅读每一个。
====== EDIT ==
尝试使用以下内容替换代码中的do循环:
Dim strAll() As String, strSNO() As String, i As Integer
strAll = Split(objReadFile.ReadAll, vbCrLf, -1, vbTextCompare) 'Gets each line from file
i = LBound(strAll)
Do While i < UBound(strAll)
If (InStr(1, strAll(i), "DAU SNo.-C0", vbTextCompare) > 0) Then
i = i + 4 'Skip 4 lines to get to first | 0 | S1050360701270 | line
Do Until InStr(1, strAll(i), "+", vbTextCompare) > 0 'Loop until line includes "+"
strSNO = Split(strAll(i), "|", -1, vbTextCompare)
'This will add them to the next available row in A / B... change as needed
Range("A60000").End(xlUp).Offset(1, 0).Value = Trim(strSNO(1))
Range("B60000").End(xlUp).Offset(1, 0).Value = Trim(strSNO(2))
i = i + 1
Loop
End If
i = i + 1
Loop