标题:如何屏蔽文件中的特殊字符^Z
只看楼主
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
结帖率:66.67%
已结贴  问题点数:20 回复次数:10 
如何屏蔽文件中的特殊字符^Z
Linux上存放的文件a.tbl内容例下:
guest1:bussiness1
^Zguest2:bussiness2
guest3:bussiness3
a.zip (521 Bytes)
(文件中看到的第二行的箭头就是“^Z”)

其中^Z特殊字符是在Linux下用vi编辑器,按下“Ctrl+Z”输入进去的

vb程序如下:
Open tempFile For Input As #1
Do Until EOF(1)
    Line Input #1,strData
    ……
Loop
Close #1

当读到第二行“^Zguest2:bussiness2”的时候,Do Until EOF(1)就直接退出循环,然后关闭文件了
在网上也查了,“Ctrl+Z”是Windows的结束符,所以我判断读到“^Z”的时候被认为结束了,所以就退出了循环
但我希望能屏蔽掉“^Z”特殊字符,正常将“guest2:bussiness2”读入

请教各位达人,高手们,拜求回帖!非常感谢!!

[ 本帖最后由 sunshine333 于 2011-6-28 09:49 编辑 ]
搜索更多相关主题的帖子: Windows 特殊字符 编辑器 Linux 
2011-06-27 15:53
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
得分:0 
希望更多人关注我的这个帖子,在线等!!!
2011-06-27 16:16
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
得分:0 
有人会么
2011-06-27 16:19
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
得分:0 
或者我想能否提前没有读文件具体内容前是否可以知道文件的字符数,或是文件行数
以此来判断文件是否结束
而不是单纯用EOF来判断呢?

不过我不太清楚vb中能否有像vc中类似可以直接指到文件末尾的方法,然后获得字符数之类的
哪位高手知道呢?跪求高手解惑!!!非常感谢!
2011-06-27 17:09
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:20 
我试不会~你能附上你的a.tbl档吗?我这没Linux~

程序代码:
Private Sub Form_Load()
Dim tempFile, strData
    tempFile = "C:\a.tbl"
    Open tempFile For Input As #1
        Do Until EOF(1)
            Line Input #1, strData
            txtText1.Text = txtText1.Text & vbCrLf & strData
        Loop
    Close #1
End Sub



不要選我當版主
2011-06-27 17:44
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:0 
依据你的描述~猜测你的问题点有可能并不在“Ctrl+Z”~
而是vbCrLf~因为Linux和Windows档案格式不同(换行符号)~
须先转换才能正常读取~

不要選我當版主
2011-06-27 18:01
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
得分:0 
回复 5楼 wube
a.zip (521 Bytes)


首先非常感谢回复!!!
“^Z”并不是在windows下能打出来的,只有在linux上才可以,我在附件中附上了a.tbl的文件
其中第二行看到的那个小箭头就是"^Z",在windows下显示就是个小箭头,如果在linux环境下用vi打开就能看到是“^Z”
2011-06-28 09:43
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
得分:0 
回复 6楼 wube
你说的是将“^Z”转换为空么
我也是这么想的,希望能把"^Z"给屏蔽掉。。。但是不知道怎么屏蔽。。
望赐教呀!
2011-06-28 09:46
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:0 
回复 8楼 sunshine333
照理说Linux的系统存出的档案~理当和的Windows的换行符号会不同​​~而导致读取不正常~
不过你可以做两次处理~先用二进位模式开启档案~再设定条件~当读取到某特殊字元~
就把它取代掉或是增加特殊字元皆可~然后存档~再用文本模式开启档案~这样应该就OK了~

如图~

0D 0A = vbCrlf
1A = ^Z

Ascii Code
http://home.educities.edu.tw/wanker742126/asm/ap04.html


或者你直接全部用二进位模式处理档案也行~Asc()和Chr()两种指令切换Ascii Code而已~

[ 本帖最后由 wube 于 2011-6-28 11:23 编辑 ]

不要選我當版主
2011-06-28 11:11
sunshine333
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-6-27
得分:0 
回复 9楼 wube
多谢多谢!

的确如你所说,用binary二进制的方式打开文件,读到"^Z"的时候就不会认为文件结束了
Open tempFile For Binary As #1
Do Until EOF(1)
    Get #1,,i
    If i <> 10 Then
        strData = strData + Chr(i)
        GoTo eContinue
    End If
    ……
    strData = ""
eContinue:
Loop
Close #1
2011-06-29 13:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-344133-1-1.html




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

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