Board logo

标题: [讨论]是否有方便的DOS和UNIX文件格式转换方法? [打印本页]

作者: honghunter     时间: 2008-1-10 14:13    标题: [讨论]是否有方便的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 15:53
Unix -> Dos

for /f "delims=" %i in (Unix.txt) do echo %i>>dos.txt
就可以了
作者: honghunter     时间: 2008-1-10 16:12


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

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

我这么做了,可是还是UNIX的啊,郁闷。
作者: 不得不爱     时间: 2008-1-10 16:40
修改了下再看!
作者: honghunter     时间: 2008-1-10 16:45
源文件中只有换行的,新文件变成“ECHO 处于打开状态。”了
作者: 不得不爱     时间: 2008-1-10 16:55
不应该吧,怎么我没有那个问题啊
作者: lxmxn     时间: 2008-1-10 17:00    标题: Unix to DOS

more myunix.txt>mydos.txt
作者: honghunter     时间: 2008-1-10 20:54
谢谢各位,我明天到公司再试试看。
作者: weasel     时间: 2009-6-1 13:08


  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 ]
作者: qqs09123     时间: 2010-7-19 20:56


  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格式文本。
作者: HAT     时间: 2010-7-20 13:24    标题: Re 10 楼

你在什么版本的Unix里面测试的?
作者: qqs09123     时间: 2010-7-20 16:05


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

不是测试是使用。是sco unix5.0.5版本
作者: HAT     时间: 2010-7-21 10:39    标题: Re 12 楼

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