| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 806 人关注过本帖, 1 人收藏
标题:vb实现将数据写入TXT,文件名默认为开始存储的时间
只看楼主 加入收藏
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
结帖率:25%
收藏(1)
已结贴  问题点数:20 回复次数:8 
vb实现将数据写入TXT,文件名默认为开始存储的时间
要求:
1、文件名默认为开始存储的时间
2、每个文件可设置为固定大小,当文件达到最大的设定值,则根据当时的时间创建一个新的以开始存储时间为文件名txt文件
3、以txt格式存储
搜索更多相关主题的帖子: 最大的 
2014-03-27 17:38
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
s = Format(Now, "yyyymmddhhnnss")
s = s & ".txt"
'得到以当前时间为文件名 例:20140327210605.txt

'文件长度,可以使用 FileLen 函数得到。可能需要关闭文件才能得到长度。
'如果写入的数据可以计数的话,那也可以使用定义一个统一的写入函数,在该函数里计算每次写的数据。

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-27 21:07
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
程序代码:
'全局变量 
Dim Filename As String
Dim lenfile As Long
Const lenfilemax = 64 * 1024   '64K

'保存文件用的函数
Public Sub wf(cs As String)
If Filename = "" Then                           '如果没有文件名,本次就没开始保存数据
    Filename = Format(Now, "yyyymmddhhnnss")    '生成一个新的文件名
    Filename = Filename & ".txt"
End If
lenfile = lenfile + Len(js) + 2                 '累加长度
If lenfile > lenfilemax Then                    '超过允许值
    'Close #1                                   '如果程序运行时都锁定该文件,那么到这里关闭原来打开文件
    Filename = Format(Now, "yyyymmddhhnnss")    '产生新的文件名
    Filename = Filename & ".txt"
    'Open Filename For Append As #1             '那么到这里打新的文件
    lenfile = Len(js) + 2                       '重新计算长度
End If
'如果锁定文件,那这里直接就写入,不要打开和关闭文件
Open Filename For Append As #1                  '追加打开文件
    Print #1, cs                                '写入数据
Close #1

End Sub


代码未经测试

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-27 21:15
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
回复 3楼 风吹过b
运行不了,Const filelenmax = 64 * 1024 提示溢出
2014-03-28 09:12
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
回复 3楼 风吹过b
我也可以定义一个变量累加,就规定每个文件能存多少条数据。
2014-03-28 09:24
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:10 
直接赋值65536也不会有这个问题
因为VB默认256为整型数字,所以你计算64*1024时候会先按整型计算,计算结果超出整型数字范围-32768~+32767,所以造成溢出
如果你把数字定义成长整型就不会出现这个问题
程序改为
Const filelenmax As Long = 64& * 1024&

数字类型:
整型:表示方法为% ,如 5%
长整型:表示方法为&,如 5&
单精度:表示方法为,如 5!
双精度:表示方法为#,如5#

[ 本帖最后由 owenlu1981 于 2014-3-28 09:49 编辑 ]
2014-03-28 09:45
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
回复 6楼 owenlu1981
现在功能是实现了,但是每次运行上位机都会创建一个文件。怎么可以实现如果第一个文件没到设定的大小,下次运行上位机会先存满第一个文件,存满第一了再创建第二个文件开始存储
2014-03-28 10:47
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 
1. 如果系统是连续运行的,每次存完档之后记录下文件名和文件大小,下一次运行前先判断该文件大小
2. 文件存放在独立的文件夹内(按文件名排序),每次存档前先判断文件夹最后一个文档的大小
2014-03-28 11:20
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
程序代码:
Option Explicit

'全局变量
Dim Filename As String
Dim lenfile As Long
Const lenfilemax = 64& * 1024    '64K ,把第一个直接数规定为 long 就可以了。

'保存文件用的函数
Public Sub wf(cs As String)
If Filename = "" Then                           '如果没有文件名,本次就没开始保存数据
    Filename = Format(Now, "yyyymmddhhnnss")    '生成一个新的文件名
    Filename = Filename & ".txt"
    
    '生成了文件名,保存一下
    Open "FileName.txt" For Output As #2
        Print #2, Filename
    Close #2
    
End If
lenfile = lenfile + Len(cs) + 2                 '累加长度
If lenfile > lenfilemax Then                    '超过允许值
    'Close #1                                   '如果程序运行时都锁定该文件,那么到这里关闭原来打开文件
    Filename = Format(Now, "yyyymmddhhnnss")    '产生新的文件名
    Filename = Filename & ".txt"
   '生成了文件名,保存一下
    Open "FileName.txt" For Output As #2
        Print #2, Filename 
    close #2

    'Open Filename For Append As #1             '那么到这里打新的文件
    lenfile = Len(cs) + 2                       '重新计算长度
End If
'如果锁定文件,那这里直接就写入,不要打开和关闭文件
Open Filename For Append As #1                  '追加打开文件
    Print #1, cs                                '写入数据
Close #1

End Sub


Private Sub Form_Load()

'程序运行时,先读一下文件,如果读取了就取文件长度,
If Dir("FileName.txt") <> "" Then               '记录文件名的文件存在
    Open "FileName.txt" For Input As #2
        Line Input #2, Filename
    Close #2
    If Len(Filename) > 0 Then                   '有内容
        If Right(Filename, 4) = ".txt" Then     '是 txt 文件
            If Dir(Filename) <> "" Then         '文件存在
                lenfile = FileLen(Filename)     '读长度
            End If
        End If
    End If
End If

End Sub



Private Sub Command1_Click()
'测试
Call wf(Now & " 测试数据")


End Sub

1、我测试时,把数据限制改小,然后测试,分成了二个文件了。
2、重新运行程序,会接着上一次的数据文件进行保存。
3、如果程序重复运行,就是运行二个以上时,如果每个程序都写入数据,会导致超出限制。如果需要杜绝这种情况,要么禁止重复运行,要么使用进程间交换数据的方式,把数据合并到一个进程里去保存,要么就直接做成二个进程,一个前台,一个后台,后台只负责接收前台的数据,然后写入数据,只能运行一下,可以接受多个前台的数据。

[ 本帖最后由 风吹过b 于 2014-3-28 21:33 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-28 11:58
快速回复:vb实现将数据写入TXT,文件名默认为开始存储的时间
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047270 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved