在DOS下查看WPS文件 贵州 王 乜 1996-03-22 要在DOS下查看WPS文件,必须解决下面几个问题:1.去掉长度为1024字节的WPS文件的文件头;2.过滤掉ASCII码0-19H中除回车、换行外的字符(如分页符);3.过滤掉ASCII码80H-0A0H之间的编码(WPS文件中的特殊控制符,如字体字号等各种排版编辑控制符);4.将软回车符换为硬回车。本程序用TURBO C 2.0编写,在386/DX40机,DOS 3.30下,486/DX66,DOS 6.22下通过,中文环境为UCDOS 3.1。程序清单如下,用法为:若要在DOS下查看WPS文件,键入TYPEWPS 文件名1即可;若要将WPS文件转换为文本文件键入TYPEWPS 文件名1 文件名2即可。其中,TYPEWPS为本文件名(读者也可另外命名),文件名1为欲查看的WPS文件,文件名2为转换为文本文件后的文件名。若只键入TYPEWPS,程序会自动提示正确的使用格式。 /*文件名TYPEWPS.EXE*/ #include main(int argc,char *argv[]) { FILE *fp1,*fp2; int ch,bh=0; if(argc==1) { printf("Usage:%s Infile [outfile]\n",argv[0]); /*若只有TYPEWPS则用中英文提示正确的使用格式*/ printf("用法:%s 文件名1.后辍名 [文件名2.后辍名]\n",argv[0]); getch(); exit(0); } if((fp1=fopen(argv[1],"rt"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } if (argc==2) fp2=stdout;/*若只有文件名1.后辍名,在屏幕上显示*/ else /*若有文件名2.后辍名,则将文件名1.后辍名转换为文本文件*/ if ((fp2=fopen(argv[2],"wt+"))==NULL) { printf("Cannot open %s\n",argv[2]); getch(); exit(1); } fseek(fp1,1024L,0);/*去掉长度为1024字节的WPS文件的文件头*/ while((ch=fgetc(fp1))!=EOF) { if((bh==0x8d)&&(ch==0x8a))/*滤掉软回车,换为硬回车*/ fputc('\n',fp2); else { if ((ch<0x7f)||(ch>0xa0))/*滤掉特殊控制符*/ { if ((ch==0x0d)||(ch==0x0a)||(ch>=0x20))/*滤掉ASCII码0-19H中除回车,换行外的字符*/ fputc(ch,fp2); } bh=ch; } } fclose(fp1); fputc(ch,fp2); fclose(fp2); }