| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 720 人关注过本帖
标题:问个文档格式的小问题~
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:6 
问个文档格式的小问题~
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册



如何使用VB6的代码将UNIX的格式档案~转成DOS的格式档案~
搜索更多相关主题的帖子: 文档 
2011-05-18 18:13
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:14 
图片附件: 游客没有浏览图片的权限,请 登录注册

无知
2011-05-18 23:30
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
找到答案了~

第一种最没效率的~用UltraEdit的手动转~太不自动所以不合格~

第二种稍微没效率的~写VB的代码自动转~但是档案太大可能引发内存直接爆掉~一定要改写法~切割档案分批转~但没效率又麻烦~所以目前暂时不予采用~
http://www.
程序代码:
Sub TransFileFormat(FileName As String)
    Dim n As Integer, i As Long, total As Long
    Dim InString(60000) As String
    
    total = 0
    n = FreeFile
    Open FileName For Input As #n
    Do While Not EOF(n)
     total = total + 1
     Line Input #n, InString(total)
     InString(total) = Replace(InString(total), Chr(10), vbCrLf)
    Loop
    Close #n
    
    n = FreeFile
    Open FileName For Output As #n
    For i = 1 To total
     Print #n, InString(i)
    Next
    Close #n
     
End Sub


第三种应该很有效率的~听说C内建函式可以转过去而且很快~只要改成DLL档~再用VB中去呼叫来用就行了~这我有经验~嘿嘿~
明天有机会再试了~

不要選我當版主
2011-05-18 23:52
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用Artless在2011-5-18 23:30:59的发言:

我知道~麻烦就在这~断行符号不同~

不要選我當版主
2011-05-18 23:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
确定是 UNIX 文档的,
用二进制打开文件,
一次读一个字节,如果是换行符,就写DOS 下的换行符进去,否则就原样写进去。

这样也很快的。也不怎么吃内存的。因为不需要把整个文档全部放到内存里。

授人于鱼,不如授人于渔
早已停用QQ了
2011-05-19 20:21
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用风吹过b在2011-5-19 20:21:04的发言:

确定是 UNIX 文档的,
用二进制打开文件,
一次读一个字节,如果是换行符,就写DOS 下的换行符进去,否则就原样写进去。

这样也很快的。也不怎么吃内存的。因为不需要把整个文档全部放到内存里。


那我就纳闷了~这样不会误判吗~还是说的UNIX的换行符号是唯一的~不会和别的字搞再一起~
之前写STDF档解析时(16->ASCII)~就遇过卡一个条件会误判~要
if(XXX(2Bytes) and YYY(2Bytes)) then    '卡2种条件
......
才能避免误判?

不知道你知道我再说什么吗?

不要選我當版主
2011-05-19 21:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
UNIX 下面的 TXT 文档是用 CHR(13) 来换行的。
这个字符,只有这一种意思。
而 DOS 下面的 TXT 文档是用 CHR(10)+ CHR(13)来换行的。

使用 二进制读取时,不会出现系统自动转换的字符出来。

TXT 档转换。
1\UNIX -》 DOS 。
if = chr(13) then    '可以使用 vblf 这个常量来代替 chr(13)
   写入  chr(10) 和 chr(13) '可以使用 VBCRLF 这个常量
elseif =chr(10) then
    '忽略掉,或提示
else
   原样写入
end if

2\DOS => UNIX
if = chr(10) then      
    '忽略掉
else
   原样写入
end if

------------------
1\分析:
chr(10) 和 chr(13) 均为不可见的控制字符,ASCII规定 <32 的均为 控制字符。32为空格
所以,chr(13)在 UNIX 里,只有一种意思,换行。控制格式的。
UNIX 里以 chr(13) 为换行。那行转换为 DOS 时,就必须按DOS 的规定,再到 chr(13) 前面补一个 chr(10)。

2、分析:
DOS 的TXT 档是, CHR(10)+CHR(13) ,去掉一个 chr(10) 就剩 chr(13)了,就正好是 UNIX 里的换行符。

3、程序错误控制。
UNIX 转 DOS ,二个判断,不存在卡住的情况。单字符转双字符,也没办法再补充其它辅助判断字符。
DOS,转 UNIX,一个判断,但存在辅助判断字符,可以再进行辅助判断。
if =chr(10) then
  if 下一个字符= chr(13) then
     写入 chr(13)
  else
     写入chr(10)
     写入刚读的下一个字符
else
  原样写入
end if

授人于鱼,不如授人于渔
早已停用QQ了
2011-05-19 22:36
快速回复:问个文档格式的小问题~
数据加载中...
 
   



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

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