VB.NET代码提取文本中间数字至数组全为0的问题排查
问题分析与解决
核心问题定位
你遇到的数组输出全为0的问题,根源在读取文件的代码块里,有两个关键错误:
1. 未重置关键变量
每处理完一行后,sep会累计递增(比如第一行处理完sep变成2),后续行的字符判断中sep=1的条件永远不满足,导致没有往数组写入任何内容;同时counter2持续递增,超出数组索引范围,后面的元素保持初始赋值的0。
2. 数组赋值逻辑混乱
middleline(counter2) = (middleline(counter2) & Mid(line, counter1, 1))中,middleline初始被赋值为整数0,用字符串拼接符&会导致类型冲突,即便逻辑正确也可能出现异常。
修复后的读取代码块
把读取部分的代码修改为:
For counter = 1 To 20 line = FileSystem.LineInput(1) ' 每处理一行重置分隔符计数和索引变量 sep = 0 Dim currentNum As String = "" For counter1 = 1 To Len(line) If Mid(line, counter1, 1) = ":" Then sep = sep + 1 ElseIf sep = 1 Then ' 拼接第二组数字的每一位 currentNum &= Mid(line, counter1, 1) End If Next ' 将拼接好的字符串转为整数存入对应数组位置 middleline(counter) = CInt(currentNum) Next
更高效的替代写法(可选)
用Split方法直接分割字符串,替换整个读取循环,代码更简洁:
For counter = 1 To 20 line = FileSystem.LineInput(1) ' 按":"分割行内容,取第二个元素(索引从0开始) Dim parts() As String = line.Split(":"c) middleline(counter) = CInt(parts(1)) Next
其他注意事项
- 随机数生成前建议调用
Randomize()初始化,避免每次运行生成完全相同的随机序列。 FileSystem是VB6兼容的旧类,推荐改用.NET原生的File类(如File.WriteAllLines、File.ReadAllLines),更符合现代.NET开发规范。
内容的提问来源于stack exchange,提问作者Borkode
相关产品推荐
相关产品推荐

