VB如何把变量保存到文件?
我知道已经有了两个相同的问题。但都有个问题。都只能写入一行。【我想写入多行。要怎么办?】又有问题了。是能换行了。可是二次『关了再写入』写入时会把之前的数据覆盖掉。这怎么解...
我知道已经有了两个相同的问题。但都有个问题。都只能写入一行。
【我想写入多行。要怎么办?】
又有问题了。是能换行了。可是二次『关了再写入』写入时会把之前的数据覆盖掉。这怎么解决? 展开
【我想写入多行。要怎么办?】
又有问题了。是能换行了。可是二次『关了再写入』写入时会把之前的数据覆盖掉。这怎么解决? 展开
4个回答
展开全部
这个问题涉及到数据结构和二进制文件。
首先你要知道变量的结构:
(把不定长度的字符串和数值变量一起存储会比较复杂一些)
Byte类型 1Byte
Integer类型 2Byte
Long类型 4Byte
Single类型 4Byte
Double类型 8Byte
假如您有这么几个变量:
Dim lngIndex As Long '4Byte
Dim intValue As Integer '2Byte
Dim bytMaps(0 to 9) As Byte '10Byte
存储上面的这些变量是这样的:
Open "1.dat" For Binary as #1
Put #1,1,lngIndex
Put #1,5,intValue
Put #1,7,bytMaps()
Close#1
读取则是:
Open "1.dat" For Binary as #1
Get #1,1,lngIndex
Get #1,5,intValue '地址=1+4=5
Get #1,7,bytMaps() '地址=5+2=7
Close#1
Get和Put格式都是:
Get(或Put) #文件句柄号,字节地址(从1开始),变量
您必须清楚变量的字节长度,并计算出下一地址的位置。如果您在第一字节写一个4字节的变量,而您又在第二字节写一个同样是4字节的变量,则会把之前那个变量的数值破坏掉。正确的方法是:如果您在第一字节写了一个4字节变量,则下一个变量在第5字节开始写。
以上是最简单的原理,但计算地址很麻烦。方便的办法是建立一个数据结构。
(以下代码需要在一个模块里建立。)
Type MyData
lngIndex As Long
intValue As Integer
bytMaps(0 to 9) As Byte
End Type
接着就可以用结构来存储数据。
Dim tData As MyData
tData.lngIndex=lngIndex
tData.intValue=intValue
tData.bytMaps()=bytMaps()
Open "1.dat" For Binary as #1
Put #1,1,tData
Close#1
Open "1.dat" For Binary as #1
Get #1,1,tData
Close#1
带结构的变量使用起来非常方便,如果您只存取一组,则不用计算地址。如果您要存取两组同样类型的结构变量,则您需要计算出这个结构的长度,然后按上面的办法计算地址就可以了。
由于篇幅关系,以上只是大概给您讲一下原理,您应当仔细学习一下关于二进制文件、数据类型和Type的用法。虽然二进制文件和数据结构似乎有点复杂,但学会它会使您受益菲浅。
(如果您要练习这个知识,比较有趣的一个用途是修改游戏存档)
首先你要知道变量的结构:
(把不定长度的字符串和数值变量一起存储会比较复杂一些)
Byte类型 1Byte
Integer类型 2Byte
Long类型 4Byte
Single类型 4Byte
Double类型 8Byte
假如您有这么几个变量:
Dim lngIndex As Long '4Byte
Dim intValue As Integer '2Byte
Dim bytMaps(0 to 9) As Byte '10Byte
存储上面的这些变量是这样的:
Open "1.dat" For Binary as #1
Put #1,1,lngIndex
Put #1,5,intValue
Put #1,7,bytMaps()
Close#1
读取则是:
Open "1.dat" For Binary as #1
Get #1,1,lngIndex
Get #1,5,intValue '地址=1+4=5
Get #1,7,bytMaps() '地址=5+2=7
Close#1
Get和Put格式都是:
Get(或Put) #文件句柄号,字节地址(从1开始),变量
您必须清楚变量的字节长度,并计算出下一地址的位置。如果您在第一字节写一个4字节的变量,而您又在第二字节写一个同样是4字节的变量,则会把之前那个变量的数值破坏掉。正确的方法是:如果您在第一字节写了一个4字节变量,则下一个变量在第5字节开始写。
以上是最简单的原理,但计算地址很麻烦。方便的办法是建立一个数据结构。
(以下代码需要在一个模块里建立。)
Type MyData
lngIndex As Long
intValue As Integer
bytMaps(0 to 9) As Byte
End Type
接着就可以用结构来存储数据。
Dim tData As MyData
tData.lngIndex=lngIndex
tData.intValue=intValue
tData.bytMaps()=bytMaps()
Open "1.dat" For Binary as #1
Put #1,1,tData
Close#1
Open "1.dat" For Binary as #1
Get #1,1,tData
Close#1
带结构的变量使用起来非常方便,如果您只存取一组,则不用计算地址。如果您要存取两组同样类型的结构变量,则您需要计算出这个结构的长度,然后按上面的办法计算地址就可以了。
由于篇幅关系,以上只是大概给您讲一下原理,您应当仔细学习一下关于二进制文件、数据类型和Type的用法。虽然二进制文件和数据结构似乎有点复杂,但学会它会使您受益菲浅。
(如果您要练习这个知识,比较有趣的一个用途是修改游戏存档)
展开全部
print #1 ,变量1 & vbcrlf &变量2 &vbcrlf & 变量3
!3个变量每个一行,Vbcrlf是换行符~
!3个变量每个一行,Vbcrlf是换行符~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每行用一个print
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Sub Command1_Click()
Open "d:\a.txt" For Output As 1
Write #1, a
Write #1, b
Write #1, c
'......
Close 1
End Sub
Open "d:\a.txt" For Output As 1
Write #1, a
Write #1, b
Write #1, c
'......
Close 1
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询