您的当前位置:首页正文

文件合并程序

2020-08-13 来源:欧得旅游网
#include #include

#define N 200 //假设每个文本有200行(可更改) #define M 180 //假设每行有180个字符(可更改)

int main() {

FILE *fp1,*fp2;

//定义两个文件指针指向A、B两个文本

char filename1[20],filename2[20];

//输入两个文本的文件名

printf(\"输入要被包含进去的文本文件名:\");

scanf(\"%s\

printf(\"输入将%s文本包含的文件名:\

scanf(\"%s\

int ch[2*N*M];

//定义一个整

型数组存储文本A和B中的内容(因为文本中可能包含中文等其他字符,char类型不够存储Unicode编码的字符)

if((fp1=fopen(filename1,\"r\"))==NULL)

//以只读方式打开文本filename1 {

printf(\"打开文件%s失败,程序自动退出\\n\ return 0; }

if((fp2=fopen(filename2,\"r\"))==NULL) //以只读方式打开文本A {

printf(\"打开文件%s失败,程序自动退出\\n\ return 0; }

char p[20];

sprintf(p,\"#include\\\"%s\\\"\ //将#include格式化输出到数组p中 int num=strlen(p); //算出字符串的长度

//定义一个字符串,方便在文本中查找

int i=0;

while((ch[i]=fgetc(fp2))!=EOF)

//开始读文本B中的内容到数组中

{

if(ch[i]=='#')

//假如遇到'#'就开始判断其后面的内容是否和p一致

{

int j=0; i++;

while((ch[i]=fgetc(fp2))==p[j+1]&&j//读取'#'的内容与p作比较 假如相同继续,直到不相等或比较完p中的内容

{

i++; j++; }

if(j==num-1)

//假如'#'后的内容与p完

全一致,即文本B中包含有\"#include\",则开始读取文本A中的内容到数组中,直到读完

{

i-=num;

//i减num是因为将读到数组中的\"#include\"删除出去 while((ch[i]=fgetc(fp1))!=EOF) {

i++; } }

else

//假如'#'后面的内容并不是include...则

需将文件指针定位到'#'后的字符位置继续读入,并继续判断

{ i=i-j;

fseek(fp2,-j-1,SEEK_CUR); } } else {

i++;

//执行完if语句的内容,继续读文本B中的内容

}

}

int n=i;

//标记i的大小

//关闭文本A和B fclose(fp1); fclose(fp2);

//现在以'w'的方式打开文本B,然后将数组中的内容写到文本B中

if((fp2=fopen(filename2,\"w\"))==NULL) {

printf(\"打开文件失败,程序自动退出\\n\"); return 0; }

for(i=0;ifputc(ch[i],fp2); //写到文本B中 putchar(ch[i]); //显示到屏幕中 }

printf(\"\\n\"); fclose(fp2); return 0; }

因篇幅问题不能全部显示,请点此查看更多更全内容