| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2456 人关注过本帖
标题:读取TXT文件中的内容以字节方式写入文件出错,望能帮忙解决。
取消只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏
已结贴  问题点数:10 回复次数:2 
读取TXT文件中的内容以字节方式写入文件出错,望能帮忙解决。
一个TXT文件,内容类似下方所示:
00
00
02
00
05
00
0E

我现在按行读取TXT文件内容,然后想以字节方式写入一个文件的指定位置,如读取了“00”,那么就在文件指定位置写入“00”;如读取了“05”,那么就在文件指定位置写入“05”;如读取了“0E”,那么就在文件指定位置写入“0E”.......但我的程序读前面的纯数字(00、02、05等)没报错,当读到“0E”就报错“实时错误13,类型不匹配”,请问怎么处理?

我的程序如下:
程序代码:
Private Sub Command1_Click()
i = 0
Dim A1 As Byte
Open Dir2.Path & "\" & File1.FileName  For Input As #1
Open Dir1.Path & "\" & File2.FileName For Binary As #2
        Do While Not EOF(1)
        Line Input #1, temp
        A1 = Hex("&H" + temp)

Put #2, (((i * 6) + 5) + 236), A1   写入变量A1的数据
i = i + 1
        If i = (196 * 225) - 1 Then
        Exit Do
        End If
Loop
Close #1
Close #2
MsgBox "ok"
End Sub


文本文件和欲写入的文件在下方:
TXT.rar (1.81 KB)
BD7265.rar (4.51 KB)


另外,想请帮忙检查一下我这段程序是否会把TXT文件里的内容写入指定位置,因为欲写入的文件非常注重数据位置,这个文件是这样的:前235个字节写的是各种基本资料,从第236字节开始,每6个字节写得是一个零件的状态,其中最后的一个字节就是需要读TXT文件改写的,我这个(((i * 6) + 5) + 236)自己算算好像是对的,请大神再帮我把把关。
搜索更多相关主题的帖子: 读取 TXT 文件 字节 写入 
2018-06-02 17:10
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
多谢各位版主的教导和帮助,我在这里解释一下,欲写入的文件比较特殊,它的数据方式似乎有他自己的排列和计算方式,所以需要写入的值有些奇怪,例如,1~9他要求写入的值是01~09;
A~F他要求写入的值是0A~0F;G~Z他要求写入的是10~29。我原来没有发现这个问题,只是直接读取,所以出现0H、0G等等,这是我的不对,给各位带来麻烦,真是不好意思。

目前我已经TXT文件内容按照他要求的值正常生成了,里面包含有00~09、0A~0F、10~29等大部分的值,也能正确读取和写入文件(我用的是笨方法),但是新的问题出现了,本来我只想改写文件的从237字节开始每第六个字节值,但是改写完后发现,不但从237字节开始每第六个字节值被改变了(这是正确的),六个字节中第一个字节也发生了改变,全变成“00”了,
例如:原6个字节是412D41510001,我要改变成412D41510003,但经过我的程序改写后,却变成002D41510003。
百思不得其解,不知道哪里错了,还请各位版主多多帮助。
我的写入程序如下:

程序代码:
i = 0
'Dim A1 As Variant
Open Dir2.Path & "\" & File2.FileName & "-temp2.txt" For Input As #5
Open Dir1.Path & "\" & File1.FileName For Binary As #6
        Do While Not EOF(5)
        Line Input #5, temp2
'        A1 = Hex("&H" + temp2)
If temp2 = "00" Then
Put #6, (((i * 6) + 5) + 237), &H0
End If
If temp2 = "01" Then
Put #6, (((i * 6) + 5) + 237), &H1
End If
If temp2 = "02" Then
Put #6, (((i * 6) + 5) + 237), &H2
End If
If temp2 = "03" Then
Put #6, (((i * 6) + 5) + 237), &H3
End If
If temp2 = "04" Then
Put #6, (((i * 6) + 5) + 237), &H4
End If
If temp2 = "05" Then
Put #6, (((i * 6) + 5) + 237), &H5
End If
If temp2 = "06" Then
Put #6, (((i * 6) + 5) + 237), &H6
End If
If temp2 = "07" Then
Put #6, (((i * 6) + 5) + 237), &H7
End If
If temp2 = "08" Then
Put #6, (((i * 6) + 5) + 237), &H8
End If
If temp2 = "09" Then
Put #6, (((i * 6) + 5) + 237), &H9
End If
If temp2 = "0A" Then
Put #6, (((i * 6) + 5) + 237), &HA
End If
If temp2 = "0B" Then
Put #6, (((i * 6) + 5) + 237), &HB
End If
If temp2 = "0C" Then
Put #6, (((i * 6) + 5) + 237), &HC
End If
If temp2 = "0D" Then
Put #6, (((i * 6) + 5) + 237), &HD
End If
If temp2 = "0E" Then
Put #6, (((i * 6) + 5) + 237), &HE
End If
If temp2 = "0F" Then
Put #6, (((i * 6) + 5) + 237), &HF
End If
If temp2 = "10" Then
Put #6, (((i * 6) + 5) + 237), &H10
End If
If temp2 = "11" Then
Put #6, (((i * 6) + 5) + 237), &H11
End If
If temp2 = "12" Then
Put #6, (((i * 6) + 5) + 237), &H12
End If
If temp2 = "13" Then
Put #6, (((i * 6) + 5) + 237), &H13
End If
If temp2 = "14" Then
Put #6, (((i * 6) + 5) + 237), &H14
End If
If temp2 = "15" Then
Put #6, (((i * 6) + 5) + 237), &H15
End If
If temp2 = "16" Then
Put #6, (((i * 6) + 5) + 237), &H16
End If
If temp2 = "17" Then
Put #6, (((i * 6) + 5) + 237), &H17
End If
If temp2 = "18" Then
Put #6, (((i * 6) + 5) + 237), &H18
End If
If temp2 = "19" Then
Put #6, (((i * 6) + 5) + 237), &H19
End If
If temp2 = "20" Then
Put #6, (((i * 6) + 5) + 237), &H20
End If
If temp2 = "21" Then
Put #6, (((i * 6) + 5) + 237), &H21
End If
If temp2 = "22" Then
Put #6, (((i * 6) + 5) + 237), &H22
End If
If temp2 = "23" Then
Put #6, (((i * 6) + 5) + 237), &H23
End If
If temp2 = "24" Then
Put #6, (((i * 6) + 5) + 237), &H24
End If
If temp2 = "25" Then
Put #6, (((i * 6) + 5) + 237), &H25
End If
If temp2 = "26" Then
Put #6, (((i * 6) + 5) + 237), &H26
End If
If temp2 = "27" Then
Put #6, (((i * 6) + 5) + 237), &H27
End If
If temp2 = "28" Then
Put #6, (((i * 6) + 5) + 237), &H28
End If
If temp2 = "29" Then
Put #6, (((i * 6) + 5) + 237), &H29
End If


i = i + 1
        If i = (114 * 118) - 1 Then
        Exit Do
        End If
Loop

Close #5
Close #6

MsgBox "ok"


附件清单如下:欲改写的文件、需要写入的第六位字节(TXT文件)、写入第六位字节前读出的6位字节、写入第六位字节后读出的6位字节,共四个文件。
欲改写的文件.rar (4.51 KB)

需要写入的第六位字节.rar (1.81 KB)

写入第六位字节前读出的6位字节.rar (18.34 KB)

写入第六位字节后读出的6位字节.rar (15.99 KB)
2018-06-04 11:06
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 

让您见笑了,总想批量用"&H"但老是出错,就用了这个笨死了的办法,看到这样的写法,我自己也总有想去撞墙的冲动,但总归不报错,暂时用用吧。

但我的问题
目前我已经TXT文件内容按照他要求的值正常生成了,里面包含有00~09、0A~0F、10~29等大部分的值,也能正确读取和写入文件(我用的是笨方法),但是新的问题出现了,本来我只想改写文件的从237字节开始每第六个字节值,但是改写完后发现,不但从237字节开始每第六个字节值被改变了(这是正确的),六个字节中第一个字节也发生了改变,全变成“00”了,
例如:原6个字节是412D41510001,我要改变成412D41510003,但经过我的程序改写后,却变成002D41510003。
百思不得其解,不知道哪里错了,还请各位版主多多帮助。

不知是不是这种写法造成的,实在想不通,还请各位版主多多帮助。
2018-06-04 11:26
快速回复:读取TXT文件中的内容以字节方式写入文件出错,望能帮忙解决。
数据加载中...
 
   



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

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