Chinaunix首页 | 论坛 | 博客
  • 博客访问: 386308
  • 博文数量: 124
  • 博客积分: 2911
  • 博客等级: 少校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 15:57
文章分类

全部博文(124)

文章存档

2012年(6)

2011年(26)

2010年(92)

我的朋友

分类:

2011-06-27 02:00:20

读入一个文本文件中的字符串,对给定的patten进行甄别并修改。
利用边甄别,边转换,边写入的办法实现
方法:
1. 把原文件改名,然后新建一个与原文件名相同的文件(目的文件),然后读取原文件,转换后写入目的文件
2. 最好同时对同一个文件进行读写操作,这样往原文件中写入数据会使原文件中数据丢失(除非是a方式打开)。如果非要这么做,那应先把文件中的数据全读到内存中(内存要能满足需要),然后在内存中对文件进行修改,再写回原文件。 
3.
以读写方式打开(r+ w+ a+都可以,不过要注意读写位置指针分别指向文件头、文件头、文件尾);
一次读一个字符(此时读写位置指针指向此字节后面,判断后,若要转换,移动读写位置指针fseek(fp,-1L,SEEK_CUR),再写入;
由于C规定:以上述三种方式打开文件,既可读又可写,但:
(1) 在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面;
(2) 在没有插入fseek()或rewind()或碰到文件结束的情况下,读不可以直接跟在写后面.
所以要转换读写状态。

举例:
#include  
void main() 
 char ch; 
 int i=0; 
 FILE *fp; 
 fp=fopen("d:\\tc\\aaa.txt","r+"); 
 if(!fp) 
 { 
  printf("can not open the file!\n"); 
  exit(0); 
 } 
 while(!feof(fp)) 
 { 
  ch=fgetc(fp); 
  if(ch>='a'&&ch<='z') 
  {  ch=ch-32; 
     fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/ 
     fputc(ch,fp); 
     fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/ 
   } 
 } 
 fclose(fp); 
 }

阅读(2846) | 评论(0) | 转发(0) |
0

上一篇:HDU_ACM_STEPS

下一篇:C++拷贝构造函数

给主人留下些什么吧!~~