中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]是否有方便的DOS和UNIX文件格式转换方法?
作者:
标题: [讨论]是否有方便的DOS和UNIX文件格式转换方法? 上一主题 | 下一主题
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『楼 主』:  [讨论]是否有方便的DOS和UNIX文件格式转换方法?

其实我只需要UNIX到DOS的,也就是'\n' -> '\r\n'

借助sed,可以是用如下方式达到效果:
sed -e "s/$/\r/" myunix.txt > mydos.txt
不过,我现在是想要问问,是否有更简单的方法,最好是不用第三方工具的。


原理我已经知道了,下面摘自:http://hi.baidu.com/dbsuit/blog/item/511eb409f9abe7266b60fba8.html
Windows/DOS与Unix文件格式之间的相互转换
2007-06-21 13:25

Windows/DOS与Unix文件格式是不同的

先搞清楚几个符号
*******************
0A   LF   ^J   换行
0D   CR   ^M   回车
*******************

DOS/Windows文本文件中使用CR(回车\r)和 LF(换行\n),
在文件的行尾的情况是是 '\r\n'

UNIX文本只使用换行符,在行的末尾有一个换行(\n),也就是'\n'
所以在windows下编辑的C程序放在unix下编译会出现"No end of newline"的Warning

两种文件格式之间的转化
Unix -> Dos
'\n' -> '\r\n'

//////////////////////////////////////////
      
        while ( (ch = fgetc(in)) != EOF )
        {
            if ( ch == '\n' )
                putchar('\r');
            putchar(ch);
        }
      
//////////////////////////////////////////

只要在Unix文件中出现的'\n'的之前加入一个'\r'字符就可以了

Unix <- DOS
'\n' <- '\r\n'

从Dos到Unix的情况复杂点,不能只是把从文件中读出的'\r'去掉就可以了
因为Dos文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。
所以在转换前要判断'\r'是否和'\n'同时出现。
如果同时出现,则去掉'\r'
如果没有同时出现,保留'\n'

//////////////////////////////////////////
      
        cr_flag = 0;    /* No CR encountered yet */
        while ( (ch = fgetc(in)) != EOF )
        {
            if ( cr_flag && ch != '\n' ) {
                /* This CR did not preceed LF */
                putchar('\r');
            }
            if ( !(cr_flag = (ch == '\r')) )
                putchar(ch);
        }

//////////////////////////////////////////
[ Last edited by honghunter on 2008-1-10 at 02:15 PM ]



探讨批量下载与智能化的下载
2008-1-10 14:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 2 楼』:  

Unix -> Dos

for /f "delims=" %i in (Unix.txt) do echo %i>>dos.txt
就可以了



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2008-1-10 15:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by 不得不爱 at 2008-1-10 03:53 PM:
Unix -> Dos

type Unix.txt>dos.txt
就可以了

我这么做了,可是还是UNIX的啊,郁闷。



探讨批量下载与智能化的下载
2008-1-10 16:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 4 楼』:  

修改了下再看!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2008-1-10 16:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 5 楼』:  

源文件中只有换行的,新文件变成“ECHO 处于打开状态。”了



探讨批量下载与智能化的下载
2008-1-10 16:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 6 楼』:  

不应该吧,怎么我没有那个问题啊



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2008-1-10 16:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  Unix to DOS

more myunix.txt>mydos.txt

2008-1-10 17:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 8 楼』:  

谢谢各位,我明天到公司再试试看。



探讨批量下载与智能化的下载
2008-1-10 20:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
weasel
初级用户




积分 118
发帖 66
注册 2006-8-18
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by lxmxn at 2008-1-10 17:00:
more myunix.txt>mydos.txt

解决了困扰我很久的问题。谢谢版主

太神奇了不知道more有这个作用。

[ Last edited by weasel on 2009-6-2 at 06:47 ]

2009-6-1 13:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qqs09123
新手上路





积分 8
发帖 8
注册 2010-7-17
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by weasel at 2009-6-1 13:08:


解决了困扰我很久的问题。谢谢版主

太神奇了不知道more有这个作用。

[ Last edited by weasel on 2009-6-2 at 06:47 ]

同理,如果是在unix系统中,使用more dosfile>unixfile,也可以将windows格式文本转换成unix格式文本。

2010-7-19 20:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  Re 10 楼

你在什么版本的Unix里面测试的?



2010-7-20 13:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qqs09123
新手上路





积分 8
发帖 8
注册 2010-7-17
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by HAT at 2010-7-20 13:24:
你在什么版本的Unix里面测试的?

不是测试是使用。是sco unix5.0.5版本

2010-7-20 16:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 13 楼』:  Re 12 楼

你真幸运,我在以下系统里面的测试全部失败:
Ubuntu、Solaris、AIX、FreeBSD



2010-7-21 10:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: