2025年3月13日 星期四 甲辰(龙)年 月十二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言合并两个文件的内容

时间:01-03来源:作者:点击数:78

下面的代码,将会合并两个文件的内容;文件名以命令行的方式传入。

该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解

  • #include <stdio.h>
  • #define MAXBUFFER 128
  • // getline() 从 fd 文件中读取一行数据,并最多保存 nmax 个字符到 buff
  • int getline(FILE * fd, char buff[], int nmax){
  • char c;
  • int n=0;
  • while ((c=getc(fd))!='\n'){
  • if(c==EOF)return EOF;
  • if(n<nmax)
  • buff[n++]=c;
  • }
  • buff[n]='\0';
  • return n;
  • }
  • // stringMerge() 将会把 filename1 和 filename2 的内容合并到 filename3,并返回 filename3 的行数
  • int stringMerge(char filename1[], char filename2[] , char filename3[]) {
  • FILE *fd1, *fd2, *fd3;
  • char buffer1[MAXBUFFER], buffer2[MAXBUFFER];
  • int ln1, ln2;
  • int n=0;
  • if ((fd1=fopen(filename1, "r"))==NULL) {
  • perror("fopen");
  • exit(1);
  • }
  • if ((fd2=fopen(filename2, "r"))==NULL) {
  • perror("fopen");
  • exit(1);
  • }
  • if ((fd3=fopen(filename3, "w"))==NULL) {
  • perror("fopen");
  • exit(1);
  • }
  • ln1 = getline(fd1,buffer1,MAXBUFFER-1);
  • ln2 = getline(fd2,buffer2,MAXBUFFER-1);
  • while ((ln1!=EOF) && (ln2!=EOF)){
  • if (strcmp(buffer1,buffer2)<=0){
  • fprintf(fd3, "%s\n", buffer1);
  • ln1 = getline(fd1,buffer1,MAXBUFFER-1);
  • }else{
  • fprintf(fd3, "%s\n", buffer2);
  • ln2 = getline(fd2,buffer2,MAXBUFFER-1);
  • }
  • n++;
  • }
  • while (ln1!=EOF){
  • fprintf(fd3, "%s\n", buffer1);
  • ln1=getline(fd1,buffer1,MAXBUFFER-1);
  • n++;
  • }
  • while (ln2!=EOF){
  • fprintf(fd3, "%s\n", buffer2);
  • ln2=getline(fd2,buffer2,MAXBUFFER-1);
  • n++;
  • }
  • fclose(fd1);
  • fclose(fd2);
  • fclose(fd3);
  • return n;
  • }
  • int main(int argc, char *argv[]) {
  • if(argc!=4){
  • printf("Usage: %s sortedfile1 sortedfile2 mergefile\n", argv[0]);
  • exit(0);
  • }
  • printf("We have %d merged records\n",
  • stringMerge(argv[1], argv[2], argv[3]));
  • }

该程序构建后,需要通过命令行工具(cmd.exe)运行。

例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的 3 个文件位于 D 盘根目录,分别为 file1.txt、file2.txt 和 merged.txt。需要在命令行进行如下操作:

打开 merged.txt,显示已经合并后的内容。

注意:由于程序是以 '\n' 来判断换行的,所以文件最后要有一个空行,否则会有“少读取一行”的假象。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门