作者:慕容春 | 来源:互联网 | 2023-05-17 09:05
现在串口通信已经没什么问题了,现在就是打开文件,把数据读出来的问题,我把数据存在一个.txt文件中,文件很大,大概有1M那样吧,每一行是一包数据,每包数据都是以回车换行结尾的,我现在想每次从文件中读出
现在串口通信已经没什么问题了,现在就是打开文件,把数据读出来的问题,我把数据存在一个.txt文件中,文件很大,大概有1M那样吧,每一行是一包数据,每包数据都是以回车换行结尾的,我现在想每次从文件中读出一包数据然后利用串口发送出去,不知道哪位大哥做过这方面的内容,还望给予解答,小妹在此谢过了!!
Dim data() As Byte
Private Sub Command7_Click()
Open "d:\su\ning.txt" For Input As 1
data() = StrConv(InputB$(LOF(1), 1), vbUnicode)'64k的限制
Close 1
End Sub
这是我试图想做的,但是没有成功,我想利用一个数组把数据读出来,但是我这样做好像文件的限制是64k,很大的文件是不行的,而且这样也不能保证我一次读出来的是一包数据,而且我运行了一下,data()中也没有读出数据来,希望大家帮帮忙,我头已经大了
14 个解决方案
分割文件,自定义大小,每组数据后面要加1个自定义的结束符
对方收到后,组合成1个文件
文件不分割不行吗,能不能有参考的代码阿,我利用数组顺序得读下去,事先知道一共有多少包数据,弄一个循环,每次读一行不行吗
我每一行的数据格式都是固定的
像这样:$DATA123456NXCVNBNNNNNNNNNNN\r\n
$DATAIIIII0000000SJJJJJJJJJJ\r\n
……
$DATA000000007777777AAAAAAAA\r\n
存在一个文本文件里,高手帮忙了,弄好后加倍给分了
数组没有限制,所谓限制,是你用了 TEXT 吧?你可以改用 richtext
Dim data() As Byte
Private Sub Command7_Click()
Open "d:\su\ning.txt" For Input As 1
Do While Not EOF(infile)
Line Input #infile, one_line
p=len(one_line)
'得到一行数据,然后串口发送处理
DoEvents
loop
Close 1
End Sub
大汗天子:
非常感谢你
你的那个p定义的是个什么类型阿,另外想你这么写的话,我需不需要知道我文件里一共有多少包数据呢?Dim data() As Byte 这句不要也可以吧,直接把p发送出去,像下面这样:
Private Sub Command7_Click()
Open "d:\su\ning.txt" For Input As 1
Do While Not EOF(infile)
Line Input #infile, one_line
p=len(one_line)
mscomm1.output=p '估计这样编译不能通过
DoEvents ‘这句话不理解,你是让我写串口发送事件的吗?
loop
Close 1
End Sub
这样的话好像也不能循环读出我文件中的数据呢,只能读出第一行吧
求正解,谢谢
dim p as long
这就是循环按行读取你的文本文件阿,
one_line里面的内容就是你文本中的一行数据
得到了这行数据,你该怎么处理,按什么方法用串口发送就自己处理了洛
p是一行文本的长度,这里没什么用处,具体发送得你自己处理
Private Sub Command7_Click()
dim one_line as string
Open "d:\su\ning.txt" For Input As 1
Do While Not EOF(1)
Line Input #1, one_line
'得到一行数据存于one_line中,然后在这里处理串口发送
DoEvents '其实这里用sleep比较好,等待一会在取下一行数据
loop
Close 1
End Sub
写快了,没把infile替换成1
Private Sub Command7_Click()
dim one_line as string
dim i as Long
Dim data() As String
i=-1
Open "d:\su\ning.txt" For Input As #1
Do While Not EOF(1)
i=i+1
ReDim Preserve data(1 To i)
Line Input #1, data(i)
DoEvents
loop
Close #1
End Sub
这个不知道行不行,DATA()中应该有数据了。
6742^_^
我按你的方法调试,出现:错误9 下标越界 是这一行ReDim Preserve data(1 To i)
不知道怎么回事
我利用zq927的方法试了一下,可以了。非常感谢感谢楼上所有回复的热心人,另外我现在有个问题,我的下位机一次只能接收8包数据,然后下位机会给上位机发送一个暂停数据发送的命令stop,等下位机处理完这8包数据会发送一请求发送命令start命令,你说像这种情况该怎么处理,是不是应该在上面的程序中加上一些限制条件,我想的是这样的
d(0)是我在mscomm接收事件中,把接收来的数据放在d(0)中
d(0)="$stop\r\n" 不知道可不可以这样子写?
if d(0)="$stop\r\n" then
等待还是关闭串口发送?? '这个地方是不是应该弄一个延时,但延时多久该怎么确定呢,因为不知道下位机 什么时候处理完??? 另外这条语句应该放在mscomm接收事件中吧?
end if
if d(0)="$start\r\n" then
发送数据 ‘这句应该加在上面读文件中嘛,加在上面那程序运行是首先等下位机发送了请求发送数据命令之后才能发送数据,我现在想第一次点发送数据命令时先发出8包,以后有请求了再发,不知道这样可不可以实现???
end if
上面的问题有好多疑问不是很确定,请高手给与解答,谢谢
先给一点分吧,很谢谢大家,希望大家能继续帮我解决上面的问题,虽然我分不多,但还是会讲信用的