VB读取txt的数据
1概述
VB通常结合其他的计算工具进行相关的二次开发,在调用软件进行计算时产生的结果文件很多都是txt格式的,或者有时候为了方便输出会在计算软件里面有意将想要的结果输出为txt格式的文件进行存储。
在VB里除了需要调用计算,还需要对txt的结果进行读取并显示,以及做相关的计算。VB在读取txt数据时用到的几个主要函数是LineInput和InputString。本次以一次实例,通过VB读取并显示txt文件的某些数据。
需要读取的数据如图1红色方框标示。该txt文件一共100多行,需要的数据在第93行和第96行。
图1数据位置
2方法
在VB里面拖曳生成一个简单的界面,如图2,用于显示数据,增加一个按钮,执行读取和显示操作。双击按钮,进入代码编辑界面,首先定义变量。如下所示:
图2 VB界面
Dim m As Integer, n As Integer, i As Integer, s(1000) As String,str(1000) As String, ss(1000) As String
m = 1
n = 1
Dim input1 As Integer
Dim output1 As Integer
input1 = 1
接着读取txt文件,读取时先获得VB界面得到的文件位置,采用FileOpen函数,代码如下:
FileOpen(1,文件位置.Text& "\linearStressResults.txt", OpenMode.Input)
得到txt文件的行数,VB读取txt文件是逐行逐行的读,一般输出的结果格式都是固定的,具体位置也是固定的,因此可以采用位置控制的方法找到需要的数据。
通过以下代码获取txt文件的总行数:
Dim data1 As String
data1 = ""
Do While Not EOF(1)
data1 = LineInput(1)
m = m + 1
Loop
LineInput函数从txt文件的第一行开始读,把每一行读取的字符串赋值给变量data1,通过循环得到总行数m。
之后关闭已经读完的文件,采用FileClose函数:
FileClose(1)
提取第93行的数据时,同样采用LineInput函数逐行读取到第93行:
FileOpen(1,文件位置.Text& "\linearStressResults.txt", OpenMode.Input)
For i = 1 To (m - 15)
s(i) = LineInput(1) \\\\'读取一行的字符串,一直读到第m-1行,第m行未读
Next i
然后得到下一行的字符串,采用InputString函数读取67列以前的字符:
str(1) = InputString(1, 67) \\\\'得到当前字符串第67列以前的字符串,当前字符串为第m行的字符串
再通过Mid函数得到55列以后的字符:
ss(1) = Mid(str(1), 55) \\\\'得到字符串str(1)第55列以后的所有字符串
第二个数据在第一个数据的下三行:
LineInput(1)
LineInput(1)
LineInput(1) \\\\'继续往下读三行
之后同样:
str(2) =InputString(1, 67)
ss(2) = Mid(str(2),55)
再之后即可显示读取的数据,显示数据时可以设置小数位数,通过Format函数,在使用这个函数之前需要将字符串转换成数值变量,用Val函数:
\\\\'膜应力
膜应力.Text = Format(Val(ss(1)), "0.00")
\\\\'point1的膜加弯
膜加弯.Text = Format(Val(ss(2)), "0.00")
最终执行程序即可显示如图3:
图3执行程序
完整的代码如下;
PrivateSubButton1_Click(senderAsObject, eAsEventArgs)HandlesButton1.Click
DimmAsInteger, nAsInteger, iAsInteger, s(1000)AsString, str(1000)AsString, ss(1000)AsString
m = 1
n = 1
Diminput1AsInteger
Dimoutput1AsInteger
input1 = 1
\\\\'得到TXT文件的行数m
output1 = 2
FileOpen(1,文件位置.Text &"\linearStressResults.txt",OpenMode.Input)
Dimdata1AsString
data1 =""
DoWhileNotEOF(1)
data1 = LineInput(1)
m = m + 1
Loop
FileClose(1)
FileOpen(1,文件位置.Text &"\linearStressResults.txt",OpenMode.Input)
Fori = 1To(m - 15)
s(i) = LineInput(1)
Nexti
str(1) = InputString(1, 67)
ss(1) = Mid(str(1), 55)
LineInput(1)
LineInput(1)
LineInput(1)
str(2) = InputString(1, 67)
ss(2) = Mid(str(2), 55)
膜应力.Text = Format(Val(ss(1)),"0.00")
膜加弯.Text =Format(Val(ss(2)),"0.00")
FileClose(1)
EndSub
说明:在读取一行中的某列数值时,这里采用的方法比较笨,而如果使用Python语言的话,可以直接用函数将读取的某行字符串全部碎片化,按照空格将长字符串碎片化为很多小字符串。在VB里面同样有这样的函数Splits(),为此尝试采用这种方法试一试。
strrr = Split(str(1)," ")
经过测试,发现由于该txt文件的数据之间的空格不一样,不太方便操作,如果数据空格数一样,比如:123456 789
采用Split(“123 456 789”,” “)
可以很方便的得到123,456,789三个字符串。
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券