【发布时间】: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脚本? -
另外,您应该简化您的示例,并提供数据或更好地对其进行硬编码,以便我们为您运行它。