VB代码从文本文件截取字符串存入数组后输出全为0,求排查
问题描述
我写的代码分为两部分:
- 第一部分:生成3个随机变量,变量间以冒号":"分隔,写入文本文件
- 第二部分:读取该文本文件,用Mid函数截取每行的第二个变量并存入数组
但输出数组时发现所有元素均为0,排查后仍未找到问题所在。
原代码
Dim r1, r2, r3, counter, counter1, counter2, sep As Integer Dim line As String Dim middleline(20) line = "" counter1 = 0 sep = 0 FileSystem.FileOpen(1, "C:\Users\user\OneDrive\Desktop\binarysearch.txt", OpenMode.Output, OpenAccess.Write) For counter = 1 To 20 If Rnd() = 0.21 Then r1 = -1 Else Do r1 = Rnd() * 100 Loop Until r1 <= 20 End If Do r2 = Rnd() * 100 Loop Until r2 >= 10 AndAlso r2 <= 50 If Rnd() = 0.21 Then r3 = -1 Else Do r3 = Rnd() * 100 Loop Until r3 <= 20 End If line = r1 & ":" & r2 & ":" & r3 FileSystem.WriteLine(1, line) Next Console.WriteLine("Generated successfully.") For counter = 1 To 20 middleline(counter) = 0 Next For counter = 1 To 20 FileSystem.PrintLine(1, line) For counter1 = 1 To Len(line) If Mid(line, 1, counter1) = ":" Then sep += 1 End If If sep = 1 Then middleline(counter2) = middleline(counter2) & Mid(line, 1, counter1) counter2 += counter2 End If Next Next For counter = 1 To 20 Console.WriteLine(middleline(counter)) Next Console.WriteLine(middleline)
问题分析与修正
核心错误点
- 文件模式未切换:写完文件后没有关闭,也没有切换到读取模式,直接用同一个句柄操作,无法读取内容
- 读取操作错误:用
FileSystem.PrintLine(1, line)是写入操作,读取应该用FileSystem.ReadLine(1) - Mid函数用法错误:
Mid(line, 1, counter1)是从第1位取counter1个字符,要判断单个字符应该用Mid(line, counter1, 1) - 计数器逻辑错误:
counter2 += counter2会让counter2始终为0,应该改为counter2 += 1;且每次处理新行时未重置sep、counter2等变量 - 数组索引与初始化问题:middleline数组处理时未正确拼接,且状态未重置导致混乱
修正后的代码
Dim r1, r2, r3, counter, counter1, counter2, sep As Integer Dim line As String Dim middleline(20) As String ' 指定数组类型为字符串,避免默认变体类型问题 line = "" counter1 = 0 sep = 0 ' 第一部分:写入文件 FileSystem.FileOpen(1, "C:\Users\user\OneDrive\Desktop\binarysearch.txt", OpenMode.Output, OpenAccess.Write) For counter = 1 To 20 If Rnd() = 0.21 Then r1 = -1 Else Do r1 = Rnd() * 100 Loop Until r1 <= 20 End If Do r2 = Rnd() * 100 Loop Until r2 >= 10 AndAlso r2 <= 50 If Rnd() = 0.21 Then r3 = -1 Else Do r3 = Rnd() * 100 Loop Until r3 <= 20 End If line = r1 & ":" & r2 & ":" & r3 FileSystem.WriteLine(1, line) Next FileSystem.FileClose(1) ' 写完后关闭文件 Console.WriteLine("Generated successfully.") ' 初始化数组 For counter = 1 To 20 middleline(counter) = "" ' 字符串数组初始化为空,而非0 Next ' 第二部分:读取文件并截取第二个变量 FileSystem.FileOpen(1, "C:\Users\user\OneDrive\Desktop\binarysearch.txt", OpenMode.Input, OpenAccess.Read) For counter = 1 To 20 line = FileSystem.ReadLine(1) ' 读取每行内容 sep = 0 Dim tempStr As String = "" ' 临时存储第二个变量 For counter1 = 1 To Len(line) Dim currentChar As String = Mid(line, counter1, 1) ' 取当前单个字符 If currentChar = ":" Then sep += 1 Else If sep = 1 Then ' 处于第二个变量的区间 tempStr &= currentChar End If End If Next middleline(counter) = tempStr ' 将截取的第二个变量存入数组 Next FileSystem.FileClose(1) ' 读完后关闭文件 ' 输出数组内容 For counter = 1 To 20 Console.WriteLine(middleline(counter)) Next
修正说明
- 写完文件后调用
FileSystem.FileClose(1)关闭文件,再以读取模式重新打开 - 读取每行用
FileSystem.ReadLine(1)获取正确内容 - 用
Mid(line, counter1, 1)逐个读取字符,判断是否为分隔符,截取第二个变量的内容 - 每次处理新行时重置sep、tempStr等变量,避免状态污染
- 将middleline数组指定为字符串类型,初始化为空字符串,确保拼接正确
内容的提问来源于stack exchange,提问作者Borkode
相关产品推荐
相关产品推荐

