为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > /*文本文件处理工具

/*文本文件处理工具

2018-03-16 32页 doc 59KB 20阅读

用户头像

is_477730

暂无简介

举报
/*文本文件处理工具/*文本文件处理工具 /*文 本文件处理工具,该程序在turboc2.0环境下编译通过*/ #include #include #include #include #include #include void character() /*字数和单词统计函数*/ { FILE *fr; unsigned chinese=0,word=0,other=0; /*分别统计汉字,单词和其它字符*/ char in_name[50],ch[2]; /*ch用来检测汉字和单词*/ a1:printf("请输入文件...
/*文本文件处理工具
/*文本文件处理工具 /*文 本文件处理工具,该程序在turboc2.0环境下编译通过*/ #include #include #include #include #include #include void character() /*字数和单词统计函数*/ { FILE *fr; unsigned chinese=0,word=0,other=0; /*分别统计汉字,单词和其它字符*/ char in_name[50],ch[2]; /*ch用来检测汉字和单词*/ a1:printf("请输入文件名(包含路径,直接回车则退出此项操作):\n"); gets(in_name); if(in_name[0]=='\0') return; if((fr=fopen(in_name,"r"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a1; } while((ch[0]=fgetc(fr))!=EOF) { ch[1]=fgetc(fr); fseek(fr,-1,1); if(ch[0]<0&&ch[1]<0) { chinese++; fseek(fr,1,1); } else if(((ch[0]>='A'&&ch[0]<='Z')||(ch[0]>='a'&&ch[0]<='z'))&&((ch[1]<'A'||(ch[1]>'Z'&&c h[1]<'a')||ch[1]>'z')&&ch[1]!=45)) word++; else if(ch[0]>0&&(!(ch[0]>='A'&&ch[0]<='Z')&&!(ch[0]>='a'&&ch[0]<='z'))) other++; if(ch[1]==EOF) break; } printf("该文件共有%u个汉字,%u个单词,%u个其它字符.\n",chinese,word,other); fclose(fr); getch(); } void replace() /*查找替换函数*/ { FILE *fr,*fw; char in_name[50],out_name[50],path[50]; /*path存放路径*/ char ch;/*存放路径*/ char p1[20],p2[20]; /*p1存放要查找的内容,p2存放要替换的内容*/ unsigned line=1; /*line用来检测要查找的内容在多少行*/ int flag=0; long i=0,k; /*k用来标记所读取文件路径的结束点*/ a1:printf("请输入文件名(包含路径,直接回车则退出此项操作):\n"); gets(in_name); if(in_name[0]=='\0') return; if((fr=fopen(in_name,"r"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a1; } printf("请输入你想查找的字符(20个以内):\n"); gets(p1); printf("替换成(直接回车则只查找不替换):\n"); gets(p2); if(p2[0]=='\0') flag=1; /*只查找不替换*/ if(flag==1) /*查找*/ { flag=0; ch=fgetc(fr); while(!feof(fr)) { if(ch==10) line++; if(ch==p1[i]) i++; else if(ch!=p1[i]) i=0; if(i==strlen(p1)) { printf("找到你所要查找的内容,位于第%u行。 \n",line); i=0; flag++; } ch=fgetc(fr); } if(flag==0) printf("没有找到相匹配的字符或字符串。\n"); fclose(fr); } else if(flag==0) /*替换*/ { a2:printf("另存为(直接回车则覆盖源文件):\n"); gets(out_name); if(strcmp(in_name,out_name)==0) { printf("您输入的新文件与源文件相同,请重新输入。\n"); goto a2; } if(out_name[0]=='\0') /*覆盖源文件*/ { for(i=0;in_name[i]!='\0';i++) if(in_name[i]==92) k=i; for(i=0;i<=k;i++) path[i]=in_name[i]; path[i]='\0'; strcat(path,"tmp.tmp"); fw=fopen(path,"w"); i=0; ch=fgetc(fr); while(!feof(fr)) { if(ch==p1[i]) i++; else if(ch!=p1[i]) { fseek(fr,-i,1); if(i!=0)ch=fgetc(fr); i=0; fputc(ch,fw); } if(i==strlen(p1)) { fputs(p2,fw); i=0; } ch=fgetc(fr); } fclose(fr); fclose(fw); unlink(in_name); rename(path,in_name); } else /*另存为新文件*/ { flag=access(out_name,0); if(flag==0) { printf("目标文件已经存在,是否替换?\n"); printf("Y->替换 其它键->另输入文件名 :"); ch=getchar(); fflush(stdin); if(ch!='Y'&&ch!='y') /*不替换*/ goto a2; } if((fw=fopen(out_name,"w"))==NULL) { printf("无法创建新文件,请确认磁盘空间未满且磁 盘没有写保护。\n"); goto a2; } ch=fgetc(fr); /*执行替换操作*/ while(!feof(fr)) { if(ch==p1[i]) i++; else if(ch!=p1[i]) { fseek(fr,-i,1); if(i!=0)ch=fgetc(fr); i=0; fputc(ch,fw); } if(i==strlen(p1)) { fputs(p2,fw); i=0; } ch=fgetc(fr); } fclose(fw); fclose(fr); } } printf("操作结束,按任意键继续..."); getch(); } void compare() /*文件比较函数*/ { char name1[50],name2[50]; char c1,c2; FILE *fp1,*fp2; printf("请输入要比较的两个文件(包含路径,直接输入回车则退出此项操作):\n"); a1:printf("文件一:"); gets(name1); if(name1[0]=='\0') return; if((fp1=fopen(name1,"rb"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a1; } a2:printf("文件二:"); gets(name2); if(name2[0]=='\0') return; if((fp2=fopen(name2,"rb"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a2; } c1=fgetc(fp1); c2=fgetc(fp2); while(!feof(fp1)&&!feof(fp2)) { if(c1!=c2) { printf("这两个文件内容不同。\n"); fclose(fp1); fclose(fp2); getch(); return; } c1=fgetc(fp1); c2=fgetc(fp2); } if(!feof(fp1)||!feof(fp2)) printf("这两个文件内容不同。\n"); else printf("这两个文件完全相同。\n"); fclose(fp1); fclose(fp2); getch(); } void split() /*文件分割合并函数*/ { FILE *fr,*fw; /*fr指向源文件,fw指向目标文件*/ char a,c; /*a用来接收用户给出的选择,c存放读取的字符*/ char str[50],path[50],in_name[50],out_name[50]; /*str用来存放读取 的文件名*/ int i,sele,s,flag=0; /*sele选择项目,s分割出子文件的数目,flag是开 关变量*/ long j,length; /*j当前读取的字节数,length每个子文件的字节数*/ int p=0,q=0; /*p,q用于检测要保存的文件的路径*/ a1:printf("1.分割文件 2.合并文件 0.退出\n"); printf("请选择:"); scanf("%d",&sele); fflush(stdin); if(sele==1) /*分割文件*/ { a2:printf("请输入要分割的文件名(包含路径,直接回车则退出此项操作):\n"); gets(in_name); if(in_name[0]=='\0') return; if((fr=fopen(in_name,"rb"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正 确。\n"); goto a2; } a3:printf("请输入分割后的子文件名(包含路径,不带扩展名,否则不能生成文件):\n"); scanf("%s",str); sprintf(out_name,"%s.%0d",str,1); flag=access(out_name,0); fflush(stdin); if(flag==0) { printf("您输入的子文件已经存在,是否覆盖?\n"); printf("Y->覆盖 其它键->重新输入 :"); a=getchar(); fflush(stdin); if(a!='Y'&&a!='y') goto a3; /*覆盖已存在的文件*/ } flag=0; a4:printf("请输入分割后的子文件大小(1-10240K字节之间,输入0终止 分割):\n"); scanf("%ld",&length); fflush(stdin); if(length==0) { printf("分割中断,按任意键继续..."); getch(); return; } printf("分割后是否要删除源文件?\n"); printf("Y->删除 其它键->不删除 :"); a=getchar(); if(a=='Y'||a=='y') flag=1; i=0; if(length>=1&&length<=10240) /*开始分割*/ { while(1) { i++; printf("生成%s.%0d子文件\n",str,i); sprintf(out_name,"%s.%0d",str,i); fw=fopen(out_name,"wb"); j=0; if(i==1) fread(&c,sizeof(char),1,fr); do { fwrite(&c,sizeof(char),1,fw); fread(&c,sizeof(char),1,fr); j++; } while(!feof(fr)&&j覆盖 其它键->重新输入 :"); a=getchar(); fflush(stdin); if(a!='Y'&&a!='y') /*不覆盖已存在的文件*/ goto a6; } flag=0; printf("合并后是否要删除子文件?\n"); printf("Y->删除 其它键->不删除 :"); a=getchar(); if(a=='Y'||a=='y') flag=1; fw=fopen(out_name,"wb"); i=1; sprintf(in_name,"%s.%0d",str,i); for(i=1;(fr=fopen(in_name,"rb"))!=NULL;) /*开始合并*/ { fclose(fr); printf("合并子文件%s.%0d\n",str,i); if((fr=fopen(in_name,"rb"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件 名是否正确。\n"); goto a5; } fread(&c,sizeof(char),1,fr); do { fwrite(&c,sizeof(char),1,fw); fread(&c,sizeof(char),1,fr); } while(!feof(fr)); fclose(fr); if(flag==1) /*需要删除源文件*/ unlink(in_name); i++; sprintf(in_name,"%s.%0d",str,i); } fclose(fw); printf("合并结束!按任意键继续...\n"); getch(); } else if(sele==0); else { printf("无效选项,请重新选择。\n"); goto a1; } } void passwd() /*文件加密函数*/ { char in_name[50],out_name[50]; /*用户输入的要加密的文件名*/ char pwd[16],path[50]; /*pwd用来保存密码,path用来存放路径*/ char a; /*接收用户的选择*/ FILE *fr,*fw; register char ch; int j=0,i=0,flag; /*j用来标记所读取文件路径的结束点*/ printf("使用须知:\n"); printf("1、加密解密时密码只要求输入一次,以明文显示,请确认输入正确\n"); printf("2、解密时只需重新运行本程序即可\n"); printf("3、解密时若密码错误不给予提示,但无法得到原文件\n"); printf("4、本软件使用的加密算法较为简单,请不要用以加密重要文件\n"); a1:printf("请输入源文件名(包含路径,直接回车则退出此项操作):\n"); if(in_name[0]=='\0') return; gets(in_name); /*得到要加密的文件名*/ if((fr=fopen(in_name,"rb"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a1; } printf("请输入密码(1-16位):\n"); gets(pwd); /*得到密码*/ a2:printf("请输入生成的文件名(包含路径,直接回车则替换源文件):\n"); gets(out_name); /*得到加密后的文件名*/ if(strcmp(in_name,out_name)==0) { printf("您输入的新文件与源文件相同,请重新输入。\n"); goto a2; } if(out_name[0]=='\0') /*直接替换源文件*/ { for(i=0;in_name[i]!='\0';i++) if(in_name[i]==92) j=i; for(i=0;i<=j;i++) path[i]=in_name[i]; path[i]='\0'; strcat(path,"tmp.tmp"); fw=fopen(path,"w"); i=0; j=0; while(pwd[++i]); ch=fgetc(fr); while(!feof(fr)) /*开始加密*/ { fputc(ch^pwd[j>=i?j=0:j++],fw); /*异或后写入fw文件 */ ch=fgetc(fr); } fclose(fr); fclose(fw); unlink(in_name); rename(path,in_name); } else /*创建新文件*/ { flag=access(out_name,0); if(flag==0) { printf("目标文件已经存在,是否替换?\n"); printf("Y->替换 其它键->另输入文件名 :"); a=getchar(); fflush(stdin); if(a!='Y'&&a!='y') /*不替换*/ goto a2; } flag=0; if((fw=fopen(out_name,"wb"))==NULL) { printf("无法创建新文件,请确认磁盘空间未满且磁盘没有写保 护。\n"); goto a2; } while(pwd[++i]); ch=fgetc(fr); while(!feof(fr)) /*加密算法开始*/ { fputc(ch^pwd[j>=i?j=0:j++],fw); /*异或后写入fp2文 件*/ ch=fgetc(fr); } fclose(fr); fclose(fw); } printf("操作完成,按任意键继续...\n"); getch(); } void _3in1(int sele) /*执行6,8,9功能函数*/ { FILE *fr,*fw; /*fr:读文件 fw:写文件*/ char in_name[50],out_name[50],path[50]; /*path用来路径*/ char a; /*用来接收用户给出的选择*/ char buf[2]; /*定义2个字节缓存,搜索连续的2个字符*/ int i=0,k,flag; /*i标志变量,flag判断目标文件是否已经存在,k用来标记所读 取文件路径的结束点*/ a1:printf("请输入源文件名(包含路径,直接回车则退出此项操作):\n"); gets(in_name); if(in_name[0]=='\0') return; if((fr=fopen(in_name,"r"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a1; } a2:printf("另存为(直接回车则替换源文件):\n"); gets(out_name); if(strcmp(in_name,out_name)==0) { printf("您输入的新文件与源文件相同,请重新输入。\n"); goto a2; } if(out_name[0]=='\0') /*替换源文件*/ { for(i=0;in_name[i]!='\0';i++) if(in_name[i]==92) k=i; for(i=0;i<=k;i++) path[i]=in_name[i]; path[i]='\0'; strcat(path,"tmp.tmp"); fw=fopen(path,"w"); i=0; buf[i]=fgetc(fr); while(!feof(fr)) { if(sele==6) /*删除空行*/ { if(!(buf[0]==10&&buf[1]==10)) fputc(buf[i],fw); if(i) i=0; else i=1; } else if(sele==8) /*CR/LF转自动换行*/ { buf[1]=fgetc(fr); fseek(fr,-1,1); if(buf[i]==10&&buf[1]!=32); else fputc(buf[i],fw); if(buf[1]==EOF) break; } else if(sele==9) /*TAB转空格*/ { if(buf[i]==9) fputc(' ',fw); else fputc(buf[i],fw); } buf[i]=fgetc(fr); } fclose(fr); fclose(fw); unlink(in_name); rename(path,in_name); } else /*另存为新文件*/ { flag=access(out_name,0); if(flag==0) { printf("目标文件已经存在,是否替换?\n"); printf("Y->替换 其它键->另输入文件名 :"); a=getchar(); fflush(stdin); if(a!='Y'&&a!='y') /*不替换*/ goto a2; } if((fw=fopen(out_name,"w"))==NULL) { printf("无法创建新文件,请确认磁盘空间未满且磁盘没有写保 护。\n"); goto a2; } buf[i]=fgetc(fr); while(!feof(fr)) { if(sele==6) /*删除空行*/ { if(!(buf[0]==10&&buf[1]==10)) fputc(buf[i],fw); if(i) i=0; else i=1; } else if(sele==8) /*CR/LF转自动换行*/ { buf[1]=fgetc(fr); fseek(fr,-1,1); if(buf[i]==10&&buf[1]!=32); else fputc(buf[i],fw); if(buf[1]==EOF) break; } else if(sele==9) /*TAB转空格*/ { if(buf[i]==9) fputc(' ',fw); else fputc(buf[i],fw); } buf[i]=fgetc(fr); } fclose(fr); fclose(fw); } printf("操作完成,按任意键继续..."); getch(); } void change() /*大小写转换函数*/ { char path[50],in_name[50],out_name[50];/*path存放路径*/ FILE *fr,*fw; char ch; int sele,i=0,k,flag; /*k用来标记所读取文件路径的结束点*/ a1:printf("1、大写->小写 2、小写->大写 0、退出\n"); printf("请选择:"); scanf("%d",&sele); fflush(stdin); if(sele==0) return; else if(sele>2||sele<0) { printf("无效选项,请重新选择。\n"); goto a1; } a2:printf("请输入文件名(包含路径,直接回车则退出此项操作):\n"); gets(in_name); if(in_name[0]=='\0') return; if((fr=fopen(in_name,"r"))==NULL) { printf("没有找到文件,请检查您输入的路径和文件名是否正确。\n"); goto a2; } a3:printf("另存为(直接回车则替换源文件):\n"); gets(out_name); if(strcmp(in_name,out_name)==0) { printf("您输入的新文件与源文件相同,请重新输入。\n"); goto a3; } if(out_name[0]=='\0') /*替换源文件*/ { for(i=0;in_name[i]!='\0';i++) if(in_name[i]==92) k=i; for(i=0;i<=k;i++) path[i]=in_name[i]; path[i]='\0'; strcat(path,"tmp.tmp"); fw=fopen(path,"w"); i=0; ch=fgetc(fr); while(!feof(fr)) { if(sele==1) /*大写->小写*/ fputc(ch>=65&&ch<=90?ch+32:ch,fw); else if(sele==2) /*小写->大写*/ fputc(ch>=97&&ch<=122?ch-32:ch,fw); ch=fgetc(fr); } fclose(fr); fclose(fw); unlink(in_name); rename(path,in_name); } else /*另存为新文件*/ { flag=access(out_name,0); if(flag==0) { printf("目标文件已经存在,是否替换?\n"); printf("Y->替换 其它键->另输入文件名 :"); ch=getchar(); fflush(stdin); if(ch!='Y'&&ch!='y') /*不替换*/ goto a3; } if((fw=fopen(out_name,"w"))==NULL) { printf("无法创建新文件,请确认磁盘空间未满且磁盘没有写保护。\n"); goto a3; } ch=fgetc(fr); while(!feof(fr)) { if(sele==1) /*大写->小写*/ fputc(ch>=65&&ch<=90?ch+32:ch,fw); else if(sele==2) /*小写->大写*/ fputc(ch>=97&&ch<=122?ch-32:ch,fw); ch=fgetc(fr); } fclose(fr); fclose(fw); } printf("操作完成,按任意键继续..."); getch(); } main() { int sele; do { clrscr(); printf(" 文本文件处理 TxtEdit\n"); printf("============================\n"); printf("> 1、字数和单词统计\n"); printf("> 2、查找和替换\n"); printf("> 3、文件比较\n"); printf("> 4、文件分割合并\n"); printf("> 5、文件加密\n"); printf("> 6、删除文件多余空行\n"); printf("> 7、大小写转换\n"); printf("> 8、CR/LF转为自动换行\n"); printf("> 9、TAB转换成空格\n"); printf("> 0、结束操作\n"); printf("============================\n"); printf("敬告:该程序专为文本文件设计\n"); printf(" 虽然其中的某些功能也适用于其它类型的文件,\n"); printf(" 但由此若带来不良后果作者概不负责!\n"); printf("请输入您要执行的操作:"); scanf("%d",&sele); fflush(stdin); if(sele==1) /*字数和单词统计*/ character(); else if(sele==2) /*查找并替换*/ replace(); else if(sele==3) /*文件比较*/ compare(); else if(sele==4) /*文件分割合并*/ split(); else if(sele==5) /*文件加密*/ passwd(); else if(sele==6||sele==8||sele==9) /*删除文本文件多余空行,CR/LF 转为自动换行,TAB转换成空格*/ _3in1(sele); else if(sele==7) /*大小写转换*/ change(); else if(sele>9||sele<0) { printf("无效项目,按任意键重新选择。\n"); getch(); } }while(sele); printf("操作结束,谢谢使用。\n"); }
/
本文档为【/*文本文件处理工具】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索