VBS循环读取文件时ReadLine跳过目标行问题求助
问题分析与解决
你的代码核心问题是重复调用ReadLine导致文件指针异常推进:
- 执行
left(file.readLine, 3)时,已经读取了H23行,文件指针直接移动到下一行; - 后续
WScript.Echo file.ReadLine读取的是下一行(H24),指针再次移动; - 最后的
Split(file.readLine, "~")又读取了再下一行,完全跳过了H23行的内容处理。
修正方案
把读取的行先存储到变量中,所有操作都基于这个变量,避免多次调用ReadLine:
Set file = fso.OpenTextFile(DataFileName, 1) Dim currentLine do until file.AtEndOfStream currentLine = file.ReadLine ' 只读取一次当前行,存到变量 if StrComp(left(currentLine, 3) , "H23") = 0 Then WScript.Echo currentLine ' 输出目标行内容 Dim lineParts lineParts = Split(currentLine, "~") ' 额外判断:避免数组索引越界(如果行中~数量不足) If UBound(lineParts) >= 4 Then If StrComp(lineParts(4) , "1") = 0 Then ExportMapName = "ExportMap_1" Else ExportMapName = "ExportMap_2" End If Else ' 处理格式错误的情况,比如设置默认值 ExportMapName = "ExportMap_Default" End If End If loop Wscript.Echo ExportMapName
关键改动说明
- 新增
currentLine变量,每次循环只调用一次ReadLine,确保操作的是同一行内容; - 增加
UBound(lineParts) >= 4的判断,防止目标行格式不符合预期时出现数组索引越界错误; - 所有对当前行的操作都基于
currentLine或拆分后的lineParts,不再直接调用file.ReadLine。
内容的提问来源于stack exchange,提问作者AlliDeacon
相关产品推荐
相关产品推荐

