|
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 来自 四川南充
状态 离线
|
|
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 来自 四川南充
状态 离线
|
|
2008-1-10 16:40 |
|
|
honghunter
中级用户
  
积分 321
发帖 135
注册 2007-2-4
状态 离线
|
|
2008-1-10 16:45 |
|
|
不得不爱
超级版主
         我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
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
状态 离线
|
|
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 |
|