C文件操作:如何在文件中插入数据
我先在文件中找到需要插入数据的位置,然后如何把数据插入文件中间呢?比如:文件内容是111111111222222222444444444我要把333333333插到222...
我先在文件中找到需要插入数据的位置,然后如何把数据插入文件中间呢?
比如:文件内容是
111111111
222222222
444444444
我要把333333333插到22222222后面
第一次写涉及文件操作的代码 望各位路过的大牛指教
222后面的数据读出后,怎么删除呢 展开
比如:文件内容是
111111111
222222222
444444444
我要把333333333插到22222222后面
第一次写涉及文件操作的代码 望各位路过的大牛指教
222后面的数据读出后,怎么删除呢 展开
4个回答
展开全部
假设文件名为w04.txt,确保本程序所在的同一个目录下有这个文件,程序执行后将结果保存到文件w05.txt中。看你的文件是有序的,则一个完整的c程序如下,在win-tc和Dev-c++下已调试通过。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 100 /* 最多读100行 */
char s[N][81];
main()
{
int i=0,j,max;
char *p,s2[81],s1[]="333333333";
FILE *fp1,*fp2;
fp1=fopen("w04.txt","r");
fp2=fopen("w05.txt","w");
while (i<N&&fgets(s[i],81,fp1)!=NULL)
{
p=strchr(s[i],'\n');
if(p)
*p='\0';
if(strcmp(s1,s[i])>0)
i++;
else
{ strcpy(s2,s[i]);
strcpy(s[i],s1);
i++;
break;
}
}
strcpy(s[i++],s2);
while (i<N&&fgets(s[i],81,fp1)!=NULL)
{
p=strchr(s[i],'\n');
if(p)
*p='\0';
i++;
}
max=i;
for(i=0;i<max;i++)
{ fprintf(fp2,"%s\n",s[i]);
printf("%s\n",s[i]);
}
fclose(fp1);
fclose(fp2);
getch();
}
上面的只是插入,你要删除?那就更简单了。你只要用命令:
for(i=...;i<...;i++) /*i是要删除的起始行*/
fprintf(fp2,"%s\n",“\0”);
如果你只要删除一行就一句:
fprintf(fp2,"%s",“\0”);
好人做到底,下面的是我写的一个删除空行的完整程序,供参考
一个TXT文档,里面有很多不必要的空行,我想把无用的空行都删除,用C语言编一个程序来实现。
设文件内容为:
weiwei
weiwei
weiwei
weiwei1976520
weiwei19760617
masheng
weiwei1976520
weiwei
masheng
上面的一个完整的c程序如下,在win-tc和Dev-c++下已调试通过。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 100
int t[N];
char s[N][81];
main()
{
int i,j;
char str[81];
char s1[81],flag;
FILE *fp1,*fp2;
fp1=fopen("in.txt","r");
fp2=fopen("out.txt","w");
for(i=0;i<N;i++)
{
fgets(s[i],81,fp1);
if((strlen(s[i]))==1) t[i]=1;/*一个空行就是只有一个回车符*/
}
for(i=0;i<N;i++)
if(t[i]==0)
fputs(s[i],fp2);
fclose(fp1);
fclose(fp2);
getch();
}
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 100 /* 最多读100行 */
char s[N][81];
main()
{
int i=0,j,max;
char *p,s2[81],s1[]="333333333";
FILE *fp1,*fp2;
fp1=fopen("w04.txt","r");
fp2=fopen("w05.txt","w");
while (i<N&&fgets(s[i],81,fp1)!=NULL)
{
p=strchr(s[i],'\n');
if(p)
*p='\0';
if(strcmp(s1,s[i])>0)
i++;
else
{ strcpy(s2,s[i]);
strcpy(s[i],s1);
i++;
break;
}
}
strcpy(s[i++],s2);
while (i<N&&fgets(s[i],81,fp1)!=NULL)
{
p=strchr(s[i],'\n');
if(p)
*p='\0';
i++;
}
max=i;
for(i=0;i<max;i++)
{ fprintf(fp2,"%s\n",s[i]);
printf("%s\n",s[i]);
}
fclose(fp1);
fclose(fp2);
getch();
}
上面的只是插入,你要删除?那就更简单了。你只要用命令:
for(i=...;i<...;i++) /*i是要删除的起始行*/
fprintf(fp2,"%s\n",“\0”);
如果你只要删除一行就一句:
fprintf(fp2,"%s",“\0”);
好人做到底,下面的是我写的一个删除空行的完整程序,供参考
一个TXT文档,里面有很多不必要的空行,我想把无用的空行都删除,用C语言编一个程序来实现。
设文件内容为:
weiwei
weiwei
weiwei
weiwei1976520
weiwei19760617
masheng
weiwei1976520
weiwei
masheng
上面的一个完整的c程序如下,在win-tc和Dev-c++下已调试通过。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 100
int t[N];
char s[N][81];
main()
{
int i,j;
char str[81];
char s1[81],flag;
FILE *fp1,*fp2;
fp1=fopen("in.txt","r");
fp2=fopen("out.txt","w");
for(i=0;i<N;i++)
{
fgets(s[i],81,fp1);
if((strlen(s[i]))==1) t[i]=1;/*一个空行就是只有一个回车符*/
}
for(i=0;i<N;i++)
if(t[i]==0)
fputs(s[i],fp2);
fclose(fp1);
fclose(fp2);
getch();
}
展开全部
把22222222后面数据全读出来,在22222222后面插入333333333及其他数据。
最好把这个文件用mmap()做成内存映像,这样操作起来更方便快捷。
最好把这个文件用mmap()做成内存映像,这样操作起来更方便快捷。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果数据都是等长的。可以考虑随机读写,当然移动数据麻烦点。
很赞成一楼的说法,用mmap()做成内存映象,能提高效率,而且也方便。
很赞成一楼的说法,用mmap()做成内存映象,能提高效率,而且也方便。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fopen
fread
fwrite
我估计你想知道的是这些函数
你知道了这些函数的用法了,
算法应该不是问题.
fread
fwrite
我估计你想知道的是这些函数
你知道了这些函数的用法了,
算法应该不是问题.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询