找回密码
 注册
广告投放 虚位以待【阿里云】2核2G云新老同享 99元/年,续费同价做网站就用糖果主机-sugarhosts.comJtti.com-新加坡服务器,美国服务器,香港服务器
查看: 972|回复: 3

去除行尾 ^M 的方法 与 文件编码批量转换

[复制链接]
发表于 2007 年 3 月 20 日 13:38:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
编译:gcc -o ctrlm ctrlm.c

使用:ctrlm 文件


  1. #include <stdio.h>

  2. #include <string.h>

  3. #include <stdlib.h>



  4. int main(int argc, char * argv[])

  5. {

  6.             char bak[FILENAME_MAX] = {0};

  7.             char cmd1[FILENAME_MAX] = "mv ";     

  8.             char cmd2[FILENAME_MAX] = "mv ";

  9.             int lch = 0;

  10.             int cch = 0;

  11.             FILE * fpw = NULL;

  12.             FILE * fpr = fopen (argv [1],"r");

  13.            

  14.             if(2 != argc)   

  15.             {

  16.                         printf ("Usage: ctrlm <filename>\n");                        

  17.                         exit(1);

  18.             }

  19.            

  20.             strcpy (bak,argv[1]);   

  21.             strcat (bak,".ctrlm");   

  22.             fpw = fopen (bak,"w");

  23.            

  24.             if( (!fpr) || (!fpw))                  

  25.             {                     

  26.                         perror ("fopen");

  27.                         exit(1);

  28.             }

  29.            

  30.             lch = fgetc(fpr);         

  31.             while(!feof(fpr))

  32.             {

  33.                         cch = fgetc(fpr);         

  34.                         if( !((10 == cch) && (13 == lch)) )

  35.                         {

  36.                                     fputc (lch,fpw);         

  37.                         }

  38.                        

  39.                         lch = cch;

  40.             }

  41.            

  42.             fclose (fpr);

  43.             fclose (fpw);

  44.             sprintf (cmd1,"mv %s %s.orig",argv[1],argv[1]);

  45.             system(cmd1);

  46.             sprintf (cmd2,"mv %s %s",bak,argv[1]);

  47.             system(cmd2);

  48.            

  49.             return 0;

  50. }
复制代码


如果想批量的话

  1. #!/bin/sh
  2. for i in *
  3. do
  4. ctrlm $i
  5. done
复制代码

只是批量替换了
并没有删除他生成的.orig文件
再研究研究



批量转换文件编码

说明:只要把 iconv 的参数改一下就可以转换相应的编码
-f 后表示源文件编码
-t 后表示目标文件编码

  1. #!/bin/sh
  2. for i in *
  3. do
  4. iconv -f gb2312 -t utf8 $i > tmp
  5. cp tmp $i
  6. rm -f tmp
  7. done
复制代码
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
发表于 2007 年 3 月 20 日 13:43:28 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价
传说中的C...
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

 楼主| 发表于 2007 年 3 月 20 日 13:44:27 | 显示全部楼层
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 3 月 20 日 13:49:42 | 显示全部楼层
原帖由 主id 于 2007-3-20 13:43 发表
传说中的C...

确实啊``````````````
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2025 年 2 月 4 日 15:43 , Processed in 0.026906 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表