从 c 中的其他 .txt 文件创建了一个新的 .txt 文件

Posted

技术标签:

【中文标题】从 c 中的其他 .txt 文件创建了一个新的 .txt 文件【英文标题】:created a new .txt file from other .txt files in c 【发布时间】:2022-01-12 13:18:18 【问题描述】:

我有 3 个 .txt 文件(Q3.txt、Q2.txt 和 Q1.txt)许多不同的行,每一行都是一个标识符,例如:(7, 25, 75 ...)。

这代表每个种族的排名。我想创建一个带有开始列表的新“FINAL”文件。

Q3.txt 文件因此包含 10 行。我希望这 10 行是“FINAL.txt”文件的前 10 行。

对于 Q2.txt 文件它有 15 行,我希望“FINAL.txt”文件中的 10-15 行也是 10-15。

最后对于 Q1.txt 文件,我希望“FINAL.txt”文件中的第 15-20 行也是第 15-20 行。

我尝试了编码,但只得到 4 行而不是预期的 20 行。

代码如下:

void prepaClassementFinal(void) 

#define NUMBER_OF_STRING 3
#define MAX_STRING_SIZE 14

    char arr[NUMBER_OF_STRING][MAX_STRING_SIZE] = "./data/Q3.txt", "./data/Q2.txt", "./data/Q1.txt";

    for (int i = 0; i < NUMBER_OF_STRING; i++)
    
        FILE* file = fopen(arr[i], "r");
        char line[256];
        int j = 0;

        FILE *fichier = fopen("./data/FINAL", "w");
        if (fichier == NULL) 
            perror("fopen() failed !");
            exit(EXIT_FAILURE);
        

        while (fgets(line, sizeof(line), file)) 
            j++;

            if(i == 0) 
                if(j >= 0 && j < 10) 
                    fprintf(fichier, "%s\n", line);
                
            
            if(i == 1)
                if(j >= 10 && j < 15) 
                    fprintf(fichier, "%s\n", line);
                
            
            if(i == 2)
                if(j >= 15 && j < 20) 
                    fprintf(fichier, "%s\n", line);
                
            
        
        fclose(fichier);
        fclose(file);
    

这是我得到的结果:

16
10
47
5
55

【问题讨论】:

fopen模式"w"在打开文件时会截断文件,所有旧内容都将丢失。 考虑编写一个函数来处理输入文件。另外,你为什么用 c 写这个而不是 sed 脚本? 另外,您应该简化您的示例,并提供数据或更好地对其进行硬编码,以便我们为您运行它。 【参考方案1】:

我建议你在循环外打开和关闭文件:

FILE *fichier = fopen("./data/FINAL", "w");
for (int i = 0; i < NUMBER_OF_STRING; i++) 
 ...

fclose(fichier);

或者,您可以在循环内执行此操作,但正如@Someprogrammerdude 所说,那么您需要附加到文件中:

FILE *fichier = fopen("./data/FINAL", "a");

【讨论】:

以上是关于从 c 中的其他 .txt 文件创建了一个新的 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

从C中的txt文件中读取整数

为 OOO Calc 电子表格中的每一行创建新的 txt/html 文件

读取“readme.txt”中的文本,输出这段英文共有多少句。并创建一个新的文件“readme2.txt”?

TXT文件批量移动到一个文件夹

C文件读写

阅读文字段落。文件,拆分成句子,并打印到新文本。 c#中的文件