校园快讯|学习资讯|CCC留言|校园文学|电脑网络|创业沙龙|博客日志|求职招聘|二手市场|学子相册

时尚女生|旅游指南|动漫天地|校园问答|失物招领|时尚生活|校园交友|笑话频道|分类广告|留言反馈

 
信息资讯 你问我答 找工作 找人才 二手市场
您的位置:思源驿站 > 学习咨讯 > 科目复习 > 浏览正文
文本文件行编辑程序设计
www.syyz.com  发布:2009-4-7 21:23:08  来自:转载  浏览:
  #include <stdio.h>
#define MAXLEN  100
#define MAXLINE 100
char Buffer[MAXLEN],filename[128];
char *LinePointer[MAXLINE];   /*定义字符指针数组来存储要编辑的文本行指针*/
int Modified=0;                /*正文被修改标志*/
int LineNum;                  /*当前正文行数*/
char *CmdPointer;             /*输入命令行字符指针*/
void Quit()  退出
{
int i;
char c;
if(Modified==1)         /* 如正文被修改,则提示用户是否要保存*/
{
printf("Save or not? (y/n):");
scanf("%c",&c);
if(c==y||c==Y)       /* 保存被修改过的正文 */
Save(); 
}
for(i=0;i<LineNum;i++)              /* 释放内存 */
free(LinePointer[i]);
}
void Insert()
{
int k,m,i;
sscanf(CmdPointer,"%d%d",&k,&m);      /* 读入参数 */
for(i=LineNum;i>m;i--)                /* 后继行向后移 */
LinePointer[i+k-1]=LinePointer[i-1];
for(i=0;i<k;i++)         /* 读入k行正文,并插入到指针数组,待写入文件*/
{
fgets(Buffer,MAXLEN,stdin);
LinePointer[m+i]=(char *)malloc(strlen(Buffer)+1);
strcpy(LinePointer[m+i],Buffer);
}
LineNum+=k;             /* 修正正文行数及设置正文被修改标志*/
Modified=1;
}
void Delete()
{
int i,j,m,n;
sscanf(CmdPointer,"%d%d",&m,&n);       /* 读入参数 */
if(n>LineNum)
n=LineNum;
for(i=m;i<=n;i++)                  /* 删除正文 */
free(LinePointer[i-1]);
for(i=m,j=n+1;j<=LineNum;i++,j++)
LinePointer[i-1]=LinePointer[j-1];
LineNum=i-1;           /* 修正正文行数及设置正文被修改标志*/
Modified=1;
}
int Save() /* 保存文件 */
{
int i;
FILE *fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("Cant open the %s.\n",filename);
return 0;
}
for(i=0;i<LineNum;i++)
{
fputs(LinePointer[i],fp);
free(LinePointer[i]);
}
fclose(fp);
return 1;
}
void Edit()                            /* 编辑命令函数*/
{
int i;
FILE *fp;
/*读入文件名*/
sscanf(CmdPointer,"%s",filename);
/* 以读的方式打开文件*/
if((fp=fopen(filename,"r"))==NULL) 
{/* 如不存在,则创建文件 */
fp=fopen(filename,"w");
fclose(fp);
fp=fopen(filename,"r");
}
i=0;
while(fgets(Buffer,MAXLEN,fp)==Buffer)
{
LinePointer[i]=(char *)malloc(strlen(Buffer)+1);
strcpy(LinePointer[i++],Buffer);
}
fclose(fp);
LineNum=i;
}
int main()
{
int j,flag=0,flag2=0;
LineNum=0;
clrscr();
while(1)
{                 printf("\n*************************************************************\n");
printf("|       e+filename:Edit (open and display)                          |\n");
printf("|       i+k+m:Insert    (insert k lines follow the row of m )           |\n");
printf("|       d+m+n :Delete   (delete the line from m to n )                |\n");
printf("|       q :Quit         (leave the system)                         |\n");
printf("*************************************************************\n");
printf("Please input a command:\n");              
gets(Buffer);                      /*读入命令行*/
for(CmdPointer=Buffer;(*CmdPointer== )||(*CmdPointer==\t);CmdPointer++);
                                          /*掠过空白符*/
if(*CmdPointer==\0)                  /*空行重新输入*/
continue;
switch(*CmdPointer)
{     
case e:                     /*调用编辑函数*/
CmdPointer++;           /*掠过命令符,指向参数*/
Edit();
break;
case i:                      /*调用插入函数*/
CmdPointer++;
Insert();
break;
case d:                      /*调用删除函数*/
CmdPointer++;
Delete();
break;
case q:                     /*调用退出函数*/
flag2=1;
Quit();
break;
default:                     /*非法命令符*/
flag=1;
break;
}
if(flag==1)
continue;
printf("The text of the file %s is:\n",filename);      /*显示正文*/
for(j=0;j<LineNum;j++)
fputs(LinePointer[j],stdout);
if(flag2==1)
break;
}
return 0;
}
(编辑:刘吉州) 留言评论】【在线投稿】【打印网页】【关闭窗口】【↑顶部
+ 相关文章
·关于期末复习计划
·2009年全国计算机软件设计师考试大纲
·09考研高数复习完美攻略
·C语言库函数(S类字母)
·C语言库函数(R类字母)
·C语言库函数(Q类字母)
·C语言库函数(P类字母)
·考研六大最高境界剖析:如同佛家修炼
·求职竞争最激烈十大行业:计算机软件登榜首
·计算机等级考试C语言上机考试改错题分析总结
版权与免责声明:
1.凡本网注明来源为“盐城师范学院思源驿站”的所有作品,包括文字与图片,未经本网授权不得转载。违反上述声明者,本网将依法追究法律责任。
2. 凡注明"来源:xxx(非本站)"的作品,均转载自其它媒体,本网转载的目的在于传播更多信息,此类稿件并不代表本网观点,本网不承担此类稿件侵权行为的直接责任及连带责任。
3. 如因作品内容、版权等需要同本网联系的,请在作品在本网发表之日起30日内联系,否则视为放弃相关权利