精华内容
下载资源
问答
  • C语言替换文件某一行

    千次阅读 2016-07-04 09:38:14
    C语言替换文件某一行 标签: 语言cfpstreamfilemfc 2011-07-03 09:47 5278人阅读 评论(0) 收藏 举报  分类:   C/C++(9)  版权声明:本文为博主原创文章,未经博主允许不得转载。...

    C语言替换文件某一行

    标签: 语言cfpstreamfilemfc
     5278人阅读 评论(0) 收藏 举报
     分类:
     

    C语言提供了文件操作,但是替换文件的某一行比较麻烦,下面是我使用的一个方法,文件中存贮的内容如下所示:

    [html] view plain copy
    1. 11       1122          0       1122          *          *          0          0  
    2. 22        222          0        222          *          *          0          0  
    3. 33        333          0        333          *          *          0          0   
    通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell 。具体的函数函数原型如下所示:
    [html] view plain copy
    1. FILE*fopen(const char*filename,const char *mode);  
    2. int fprintf(FILE*stream,const char *format,...)  
    3. int fscanf(FILE* stream,const char *format,...)  
    4. int fseek(FILE*stream,long offset,int origin)  
    5. long ftell(FILE* stream)  
    首先,数据写入到文件中的是追加的形式。具体的写入代码如下所示:

    主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)

    [cpp] view plain copy
    1. FILE *fp=fopen("clientinfo.txt","ar+");  
    2. Clientinfo info;  
    3. memset(&info,0,sizeof(Clientinfo));  
    4. 。。。。  
    5. 。。。。/*完成对info结构体的赋值*/  
    6. fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\  
    7.         info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);  
    8. fprintf(fp,"\n");  
    9. fclose(fp);  
    10. 修改处的代码如下所示,整个代码是我在MFC中实现的:  
    [cpp] view plain copy
    1. FILE *fp=fopen("clientinfo.txt","r+");  
    2. Clientinfo info;  
    3. long nline=0,n;  
    4. memset(&info,0,sizeof(Clientinfo));  
    5. int oldline=0;/*记录匹配位置的前一行的偏移量*/  
    6. CString str;  
    7. while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\  
    8.         &info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF)  
    9. {     
    10.       str.Format("%d",nline);  
    11.       MessageBox(str);  
    12.       if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/  
    13.       {  
    14.      oldline=nline;  
    15.       break;  
    16.       }  
    17.       nline=ftell(fp);  
    18. }  
    19.   
    20. fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,这个位置是上一次读的最后,故写的时候要先写换行,第一行除外*/  
    21.     if(oldline!=0)  
    22.     {  
    23.      fprintf(fp,"\n");  
    24.     }  
    25.     fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\  
    26.         info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);  
    27.     fprintf(fp,"\n");  
    28.     fclose(fp);  
    [html] view plain copy
    1. 下面是修改后的数据,修改第二行,没有影响前后的数据。  
    2.         11       1122          0       1122          *          *          0          0  
    3.         22       222f          0       222f          *          *          0          0  
    4.         33        333          0        333          *          *          0          0  
    展开全文
  • C语言提供了文件操作,但是替换文件的某一行比较麻烦,下面是我使用的一个方法,文件中存贮的内容如下所示:11 1122 0 1122 * * 0 022 222 0 222 * * 0 ...

    C语言提供了文件操作,但是替换文件的某一行比较麻烦,下面是我使用的一个方法,文件中存贮的内容如下所示:

    11 1122 0 1122 * * 0 0

    22 222 0 222 * * 0 0

    33 333 0 333 * * 0 0通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell 。具体的函数函数原型如下所示:

    FILE*fopen(const char*filename,const char *mode);

    int fprintf(FILE*stream,const char *format,...)

    int fscanf(FILE* stream,const char *format,...)

    int fseek(FILE*stream,long offset,int origin)

    long ftell(FILE* stream)首先,数据写入到文件中的是追加的形式。具体的写入代码如下所示:

    主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)

    FILE *fp=fopen("clientinfo.txt","ar+");

    Clientinfo info;

    memset(&info,0,sizeof(Clientinfo));

    。。。。

    。。。。/*完成对info结构体的赋值*/

    fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\

    info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);

    fprintf(fp,"\n");

    fclose(fp);

    修改处的代码如下所示,整个代码是我在MFC中实现的:

    FILE *fp=fopen("clientinfo.txt","r+");

    Clientinfo info;

    long nline=0,n;

    memset(&info,0,sizeof(Clientinfo));

    int oldline=0;/*记录匹配位置的前一行的偏移量*/

    CString str;

    while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\

    &info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF)

    {

    str.Format("%d",nline);

    MessageBox(str);

    if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/

    {

    oldline=nline;

    break;

    }

    nline=ftell(fp);

    }

    fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,这个位置是上一次读的最后,故写的时候要先写换行,第一行除外*/

    if(oldline!=0)

    {

    fprintf(fp,"\n");

    }

    fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\

    info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);

    fprintf(fp,"\n");

    fclose(fp);

    下面是修改后的数据,修改第二行,没有影响前后的数据。

    11 1122 0 1122 * * 0 0

    22 222f 0 222f * * 0 0

    33 333 0 333 * * 0 0

    展开全文
  • 文件中存贮的内容如下所示: 11 1122 0 1122 * * 0 0 22 222 0 222 * * 0 0 33 333 0 333 * * 0 0 通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell 。 具体的函数函数原型如下所示: FILE*fopen&...
  • 文件中存贮的内容如下所示:11 1122 0 1122 * * 0 022 222 0 222 * * 0 033 333 0 333 * * 0 0通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell。具体...

    文件中存贮的内容如下所示:

    11 1122 0 1122 * * 0 0

    22 222 0 222 * * 0 0

    33 333 0 333 * * 0 0

    通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell。

    具体的函数函数原型如下所示:

    FILE*fopen(const char*filename,const char *mode);

    int fprintf(FILE*stream,const char *format,...)

    int fscanf(FILE* stream,const char *format,...)

    int fseek(FILE*stream,long offset,int origin)

    long ftell(FILE* stream)

    首先,数据写入到文件中的是追加的形式。

    具体的写入代码如下所示:

    主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)

    FILE *fp=fopen("clientinfo.txt","ar+");

    Clientinfo info;

    memset(&info,0,sizeof(Clientinfo));

    。。。。

    。。。。/*完成对info结构体的赋值*/

    fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\

    info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);

    fprintf(fp,"\n");

    fclose(fp);

    修改处的代码如下所示,整个代码是我在MFC中实现的:

    FILE *fp=fopen("clientinfo.txt","r+");

    Clientinfo info;

    long nline=0,n;

    memset(&info,0,sizeof(Clientinfo));

    int oldline=0;/*记录匹配位置的前一行的偏移量*/

    CString str;

    while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\

    &info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF)

    {

    str.Format("%d",nline);

    MessageBox(str);

    if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/

    {

    oldline=nline;

    break;

    }

    nline=ftell(fp);

    }

    fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,这个位置是上一次读的最后,故写的时候要先写换行,第一行除外*/

    if(oldline!=0)

    {

    fprintf(fp,"\n");

    }

    fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\

    info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);

    fprintf(fp,"\n");

    fclose(fp);

    下面是修改后的数据,修改第二行,没有影响前后的数据。

    11 1122 0 1122 * * 0 0

    22 222f 0 222f * * 0 0

    33 333 0 333 * * 0 0

    总结

    利用C语言替换文件中某一行的方法到这就基本结束了,大家都学会了吗?希望这篇文章的内容对大家的学习和工作能带来一定的帮助,如果有疑问,大家可以留言交流。

    展开全文
  • 要点: 1、fgetc() 字符读取操作 2、fgets()字符串读取操作(整行读取) 3、is系列函数:如isupper(c)和islower(c) 4、fputs()函数写入字符 ...常用的文件操作函数:

    要点:

    1、fgetc() 字符读取操作

    2、fgets()字符串读取操作(整行读取)

    3、is系列函数:如isupper(c)和islower(c)

    4、fputs()函数写入字符


    int replaceBlankAndBig(int argc, char* argv[]){
    	char c;
    	FILE *fin, *fout;
    	fin = fopen("The_Holy_Bible.txt", "r");
    	if (!fin) {
    		perror("The_Holy_Bible.txt");
    		return;
    	}
    	fout = fopen("The_Holy_Bible_Res.txt", "w");
    	if (!fout) {
    		perror("The_Holy_Bible_Res.txt");
    		return;
    	}
    	while ((c = fgetc(fin)) != EOF) { 
    		//if (isupper(c) || islower(c))  //大小写互换!
    		if (isupper(c))
    			c ^= 0x20;
    		else if (ispunct(c))
    		//else if (c==','||c=='.')
    			c = ' ';
    		fputc(c, fout);
    	}
    	fclose(fin);
    	fclose(fout);
    	return 0;
    }
    
    int cnt(int argc, char* argv[]){
    	char c;
    	FILE *fin, *fout;
    	int cnt_char = 0, cnt_word = 1, cnt_line = 1;
    	fin = fopen("The_Holy_Bible_Res.txt", "r");
    	if (!fin){
    		perror("The_Holy_Bible_Res.txt");
    		return;
    	}
    	char str[1000];
    	int i;
    	while ((fgets(str, 1000, fin)) != NULL){
    		for (i = 0; i < strlen(str); ++i){
    			if (!isspace(str[i]))
    				cnt_char++;
    			if (isspace(str[i]))
    				cnt_word++;
    			if (str[i] == '\n')
    				cnt_line++;
    		}
    	}
    	printf("chars:%d\nwords:%d\nlines:%d\n",cnt_char, cnt_word,cnt_line);
    	fclose(fin);
    
    	return 0;
    }

    常用的文件操作函数:


    展开全文
  • 文件中存贮的内容如下所示:11 1122 0 1122 * * 0 022 222 0 222 * * 0 033 333 0 333 * * 0 0通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell。具体...
  • //将指定一行的内容全部替换为空格 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;unistd.h&gt; #include&lt;fcntl.h&gt; int main(char argc,...
  • 文件中存贮的内容如下所示:11 1122 0 1122 * * 0 022 222 0 222 * * 0 033 333 0 333 * * 0 0通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell。具体...
  • C语言简单实现把指定内容替换为其他内容的功能,根据配置的内容可以一次替换多个内容,已在VC++6.0和HP-UNIX上编译通过,并测试通过,在RELEASE文件里面有例子
  • 大家都知道写C语言程序的时候需要包含头文件,需要预处理指令#include 例如 #include 。 在做算法题目的时候遇到一个题目,要求写一个...文件a.txt的内容。不多说,上代码: #include #include #define FLAG...
  • c语言操作文件

    2020-06-24 08:01:23
    因为读后再写的指针是乱的,读后需要定位一下指针的位置用fseek(fp,0,SEEK_CUR)即可(也可以用ftell()),然后再在当前位置写,以上是对于原始文件长度不改变的情况,即想替换文件中间某些位置的内容时,可以先读,...
  • 请问各位,对一个文本的一行内容进行替换操作,新内容比原内容长度短,多出来的那段字符怎么删除掉?多谢 ps.由于操作原因不允许生成一个临时文件再通过删除原文件再将临时文件改名的方式。
  • 翻译过程所要做的第一步就是头文件展开,把stdio.h里的文件全部展开,这个过程虽然我们看不到但是确真实存在,在这个过程中,编译器还会进行宏替换,把我们注释掉的内容完全抹去。我们可以在linux下观察到各个过程。...
  • #include <stdio.h> #include <stdlib.h> #include <sting.h> int replace(char * a,char * b); int main(int argc,char * argv...这是目前的代码,不知道如何遍历文件找到指定字符串计数并替换
  • 附上一个C语言实现文本替换 的例子 #include #include #include #include using namespace std; void myreplace(const string& filename,const string& tofind,const string& toreplace) { ifstream ...
  • 在许多文件处理应用中,你可能对创建一个新的文件不感兴趣,但是对修改已存在的文件感兴趣。...更新文件最普遍的方法是:先写新数据到临时文件中,然后更新文件的整个内容之后,用临时文件替换原有文件。因此,...
  • 将fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。 ...
  • c语言 文件 字符串添加,或替换,或修改 有a.txt内容为 a=1 x!=22 b=333 d=4444 现在要将要a.txt的内容改为 a=100 b=2 c=3 d=4444 即是: 1.在1后面添加00 2.删除第二行 3.删除第三行的后两个3 4.添加一行c=3 ...
  • 此程序分成两个部分,一是对文件文本单词的查找,二是对文本内容替换。 程序中需要创建子文件textfile,在在该文件中创建wordtext和wordtext2,可以直接用记事本打开文件并且把需要处理的文本写入文件,打开程序就...
  • 有一个txt文件内容: <p>123456789   现在想将45替换成ab,有办法对这个txt文件直接操作吗?</p>
  • C语言中更新文件

    千次阅读 2014-12-17 11:31:04
    在大多数系统中,如果一个文件因为输入... 更新文件最普遍的方法是:先写新数据到临时文件中,然后更新文件的整个内容之后,用临时文件替换原有文件。因此,如果希望编写程序来更新已有的文件,该程序下面的步骤组成:
  • C语言 C语言组成

    2020-09-05 21:36:37
    C语言有多个 .c 文件和 .h文件组成 .c :C语言源代码文件 .h :C语言头文件 .C文件 组成: 1)头文件 #include <stdio.h> #include "student.h" < >包括起来的是系统的头文件 " "包含起来的是自己...
  • C语言总结之文件包含

    千次阅读 2013-12-21 22:56:26
    预处理器发现#include指令后,就会寻找跟在这个指令后的文件名的文件,并把这个文件内容包含到当前文件中,替换掉#include指令。相当于把被包含的文件在当前文件中键入。 #include有两种使用形式: #include #...
  • 工作内容: 进行预处理(预处理指令),进行宏替换和头文件导入或者条件编译等 去掉注释内容 不会自动生成文件 -o 可以指定生成的目标文件 .i 2.编译 -S 检查语法错误 生成汇编程序 工作内容: 检查源代码或者...
  • #include命令告诉预处理器用指定文件内容替换这条命令,两种不同的命令格式决定了预处理器对指定文件的搜索方式:如果文件名是用一对尖括号括起来的,则预处理器直接到存放编译器所提供的标准头文件的目录(通常是...
  • C语言从源码到可执行文件的过程

    千次阅读 2019-04-27 14:02:39
    #include语句所包含的文件内容替换掉语句本身 所有已定义的宏被展开 根据#ifdef,#if等语句的条件是否成立取舍相应的部分 预处理之后源码中不再包含任何预处理语句。 2、编译 这一阶段,编译器对源码进行词法分析、...
  • 深入理解C语言中的.h文件和.c文件

    千次阅读 2017-04-14 20:38:04
    总结: 1、编译器只编译.c文件并生成...5、将程序分成若干.c和.h文件 以及它们分别写什么内容——编程规范 具体分析介绍如下:—————————————-概念引入——编译器1、程序本身是一堆指令和数据的集合,
  • 废话篇,请忽略:(2017-04-13) 看见一个网页感觉功能设计的不错,就把源码给下载下来。...第一次手动替换成了小写,之后由于网页内容稍长些,模块分割的时候出错了,准确地说是转码没备份,出现乱码了。于是重新下了一次网...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 369
精华内容 147
关键字:

c语言替换文件内容

c语言 订阅