VBScript没有阅读下一行

时间:2018-03-12 17:18:26

标签: vbscript

我拼凑了一个有效的脚本,但不是100%。 我正在从文件(A)中读取值,然后在另一个文件(B)中的特定位置搜索匹配,然后将整行数据写入新文件(C)。 下面的脚本非常适合读取数据的第一行(文件A),但它不会超过第一行。

以下是我从文件(A)中搜索的字符串示例列表。

9899008KT2018012600000444
9899008KT2018012600000445

这是我的剧本:

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile  = fso.OpenTextFile("C:\JeffTestFolder\9899008KT2018012600.txt", 1)
Set outFile = fso.OpenTextFile("C:\TestFolder\9899008KT2018012600_Compiled.txt", 8, True)
Set listFile = fso.OpenTextFile("C:\TestFolder\ListOfIDs.txt", 1) 
Do Until listFile.AtEndOfStream
  fName = listFile.ReadLine
  Do Until inFile.AtEndOfStream
    line = inFile.ReadLine
    If Mid(line, 7, 25) = fName Then outFile.WriteLine line
  Loop
Loop

我被困在如何将它转到Loop并读取文件(A)中的下一行然后在文件(B)中搜索该值并将其写入新文件(C)。

1 个答案:

答案 0 :(得分:0)

如果你想比较A的每一行与B的每一行,你需要为A的每一行重复读取B:

Do Until listFile.AtEndOfStream
  fName = listFile.ReadLine
  Set inFile = fso.OpenTextFile("C:\JeffTestFolder\9899008KT2018012600.txt")
  Do Until inFile.AtEndOfStream
    line = inFile.ReadLine
    If Mid(line, 7, 25) = fName Then outFile.WriteLine line
  Loop
  inFile.Close
Loop

或将整个文件读入数组或字典,并使用该数组/字典作为参考:

txt = fso.OpenTextFile("C:\JeffTestFolder\9899008KT2018012600.txt").ReadAll
arr = Split(txt, vbNewLine)
Do Until listFile.AtEndOfStream
  fName = listFile.ReadLine
  For Each line In arr
    If Mid(line, 7, 25) = fName Then outFile.WriteLine line
  Next
Loop
Set dict = CreateObject("Scripting.Dictionary")
txt = fso.OpenTextFile("C:\JeffTestFolder\9899008KT2018012600.txt").ReadAll
For Each line In Split(txt, vbNewLine)
  dict(Mid(line, 7, 25)) = True
Next
Do Until listFile.AtEndOfStream
  fName = listFile.ReadLine
  If dict.Exists(fName) Then outFile.WriteLine line
Loop

选择哪一个取决于文件大小和系统资源。第二种和第三种方法提供了更好的性能,因为它们可以避免重复的磁盘I / O,但是当文件很大时可能会导致内存耗尽。