从 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 文件的主要内容,如果未能解决你的问题,请参考以下文章
为 OOO Calc 电子表格中的每一行创建新的 txt/html 文件