VB讀取txt的數(shù)據(jù)
VB讀取txt的數(shù)據(jù)
1 概述
VB通常結(jié)合其他的計算工具進行相關(guān)的二次開發(fā),在調(diào)用軟件進行計算時產(chǎn)生的結(jié)果文件很多都是txt格式的,或者有時候為了方便輸出會在計算軟件里面有意將想要的結(jié)果輸出為txt格式的文件進行存儲。
在VB里除了需要調(diào)用計算,還需要對txt的結(jié)果進行讀取并顯示,以及做相關(guān)的計算。VB在讀取txt數(shù)據(jù)時用到的幾個主要函數(shù)是LineInput和InputString。本次以一次實例,通過VB讀取并顯示txt文件的某些數(shù)據(jù)。
需要讀取的數(shù)據(jù)如圖1紅色方框標(biāo)示。該txt文件一共100多行,需要的數(shù)據(jù)在第93行和第96行。

圖1 數(shù)據(jù)位置
2 方法
在VB里面拖曳生成一個簡單的界面,如圖2,用于顯示數(shù)據(jù),增加一個按鈕,執(zhí)行讀取和顯示操作。雙擊按鈕,進入代碼編輯界面,首先定義變量。如下所示:

圖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函數(shù),代碼如下:
FileOpen(1, 文件位置.Text & "\linearStressResults.txt", OpenMode.Input)
得到txt文件的行數(shù),VB讀取txt文件是逐行逐行的讀,一般輸出的結(jié)果格式都是固定的,具體位置也是固定的,因此可以采用位置控制的方法找到需要的數(shù)據(jù)。
通過以下代碼獲取txt文件的總行數(shù):
Dim data1 As String
data1 = ""
Do While Not EOF(1)
data1 = LineInput(1)
m = m + 1
Loop
LineInput函數(shù)從txt文件的第一行開始讀,把每一行讀取的字符串賦值給變量data1,通過循環(huán)得到總行數(shù)m。
之后關(guān)閉已經(jīng)讀完的文件,采用FileClose函數(shù):
FileClose(1)
提取第93行的數(shù)據(jù)時,同樣采用LineInput函數(shù)逐行讀取到第93行:
FileOpen(1, 文件位置.Text & "\linearStressResults.txt", OpenMode.Input)
For i = 1 To (m - 15)
s(i) = LineInput(1) '讀取一行的字符串 ,一直讀到第m-1行,第m行未讀
Next i
然后得到下一行的字符串,采用InputString函數(shù)讀取67列以前的字符:
str(1) = InputString(1, 67) '得到當(dāng)前字符串第67列以前的字符串,當(dāng)前字符串為第m行的字符串
再通過Mid函數(shù)得到55列以后的字符:
ss(1) = Mid(str(1), 55) '得到字符串str(1)第55列以后的所有字符串
第二個數(shù)據(jù)在第一個數(shù)據(jù)的下三行:
LineInput(1)
LineInput(1)
LineInput(1) '繼續(xù)往下讀三行
之后同樣:
str(2) = InputString(1, 67)
ss(2) = Mid(str(2), 55)
再之后即可顯示讀取的數(shù)據(jù),顯示數(shù)據(jù)時可以設(shè)置小數(shù)位數(shù),通過Format函數(shù),在使用這個函數(shù)之前需要將字符串轉(zhuǎn)換成數(shù)值變量,用Val函數(shù):
'膜應(yīng)力
膜應(yīng)力.Text = Format(Val(ss(1)), "0.00")
'point1的膜加彎
膜加彎.Text = Format(Val(ss(2)), "0.00")
最終執(zhí)行程序即可顯示如圖3:

圖3 執(zhí)行程序
完整的代碼如下;
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
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文件的行數(shù)m
output1 = 2
FileOpen(1, 文件位置.Text & "\linearStressResults.txt", OpenMode.Input)
Dim data1 As String
data1 = ""
Do While Not EOF(1)
data1 = LineInput(1)
m = m + 1
Loop
FileClose(1)
FileOpen(1, 文件位置.Text & "\linearStressResults.txt", OpenMode.Input)
For i = 1 To (m - 15)
s(i) = LineInput(1)
Next i
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)
膜應(yīng)力.Text = Format(Val(ss(1)), "0.00")
膜加彎.Text = Format(Val(ss(2)), "0.00")
FileClose(1)
End Sub
說明:在讀取一行中的某列數(shù)值時,這里采用的方法比較笨,而如果使用Python語言的話,可以直接用函數(shù)將讀取的某行字符串全部碎片化,按照空格將長字符串碎片化為很多小字符串。在VB里面同樣有這樣的函數(shù)Splits(),為此嘗試采用這種方法試一試。
strrr = Split(str(1), " ")
經(jīng)過測試,發(fā)現(xiàn)由于該txt文件的數(shù)據(jù)之間的空格不一樣,不太方便操作,如果數(shù)據(jù)空格數(shù)一樣,比如:123 456 789
采用Split(“123 456 789”,” “)
可以很方便的得到123,456,789三個字符串。
工程師必備
- 項目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















