首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VB读取txt的数据

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三个字符串。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180610B00ERP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券