我现在有3个文本文件要实现两个文本文件的查询,查询完成后得到生成第三个文件.
文本1的格式是这样的:
*班次*时间*始发站*终点站*票价*里程*线路类型*车型*准售*余票*状态*途经站点*
*1050*05:30*和吉*化州*130*625*非直达*大型卧铺高级*35*35*在售*化州*
*1006*05:30*和吉*电白* 100*570*非直达*大型席座高级*45*45*发班*阳江,阳西,沙琅,电白*文本2的格式是这样:
*班次*配客站点*
*1050*和吉汽车客货运站*
*1006* 无*这是要得到的文本格式:
*班次*时间*始发站*终点站*配客站点*票价*里程*线路类型*车型*准售*余票*状态*途经站点*
*1050*05:30*和吉*化州*和吉汽车客货运站*130*625*非直达*大型卧铺高级*35*35*在售*化州*
*1006*05:30*和吉*电白* 无*100*570*非直达*大型席座高级*45*45*发班*阳江,阳西,沙琅,电白*其实就是查询第一个文件的班次跟第二个文件班次对应的配客点对应,然后生成到第三个文件里面去.
文本1的格式是这样的:
*班次*时间*始发站*终点站*票价*里程*线路类型*车型*准售*余票*状态*途经站点*
*1050*05:30*和吉*化州*130*625*非直达*大型卧铺高级*35*35*在售*化州*
*1006*05:30*和吉*电白* 100*570*非直达*大型席座高级*45*45*发班*阳江,阳西,沙琅,电白*文本2的格式是这样:
*班次*配客站点*
*1050*和吉汽车客货运站*
*1006* 无*这是要得到的文本格式:
*班次*时间*始发站*终点站*配客站点*票价*里程*线路类型*车型*准售*余票*状态*途经站点*
*1050*05:30*和吉*化州*和吉汽车客货运站*130*625*非直达*大型卧铺高级*35*35*在售*化州*
*1006*05:30*和吉*电白* 无*100*570*非直达*大型席座高级*45*45*发班*阳江,阳西,沙琅,电白*其实就是查询第一个文件的班次跟第二个文件班次对应的配客点对应,然后生成到第三个文件里面去.
f1 = App.Path & "\文本一.txt"
f2 = App.Path & "\文本二.txt"
Dim dataArr1()
Dim dataArr2()'文件内不允许有非法数据,否则报错
ReadFileToArray f1, dataArr1() '读文本一数据到数组
ReadFileToArray f2, dataArr2() '读文本二数据到数组Open App.Path & "\文本三.txt" For Output As #1Dim wStr As String
'写头
wStr = "*"
For col = 1 To 4
wStr = wStr & dataArr1(col, 1) & "*"
Next
wStr = wStr & dataArr2(2, 1) & "*" '插入文本二头
For col = 5 To UBound(dataArr1, 1)
wStr = wStr & dataArr1(col, 1) & "*"
Next
Print #1, wStr'查找并写数据
For row = 2 To UBound(dataArr1, 2)
Index = FindKey(dataArr1(1, row), dataArr2())
If Index <> -1 Then
wStr = "*"
For col = 1 To 4
wStr = wStr & dataArr1(col, row) & "*"
Next
wStr = wStr & dataArr2(2, Index) & "*" '插入文本二数据
For col = 5 To UBound(dataArr1, 1)
wStr = wStr & dataArr1(col, row) & "*"
Next
Print #1, wStr
Else
Debug.Print "没找到匹配项"
End If
Next
Close #1
End Sub'读文本数据到数组
Private Sub ReadFileToArray(fileName, DataArr())
Open fileName For Input As #1
Dim tmps As String
Dim tmpa
Dim rows As Long, cols As IntegerLine Input #1, tmps
tmpa = Split(tmps, "*")
rows = 1: cols = UBound(tmpa) - 1
ReDim DataArr(1 To cols, 1 To rows)
For col = 1 To cols
DataArr(col, rows) = tmpa(col)
Next
While Not EOF(1)
Line Input #1, tmps
tmpa = Split(tmps, "*")
rows = rows + 1
ReDim Preserve DataArr(1 To cols, 1 To rows)
For col = 1 To cols
DataArr(col, rows) = tmpa(col)
Next
Wend
Close #1
End Sub
'查找匹配项
Private Function FindKey(key, DataArr()) As Long
Dim row As Long
For row = 1 To UBound(DataArr, 2)
If DataArr(1, row) = key Then Exit For
Next
If row > UBound(DataArr, 2) Then
FindKey = -1
Else
FindKey = row
End If
End Function