【发布时间】:2021-02-26 17:38:27
【问题描述】:
我正在尝试在过滤数据时将文件 (customers.txt) 复制到新文件 (filtered_customers.txt)。现在我的程序只读取 "customers.txt" 文件中的所有内容并将其复制到新文件中。我正在尝试更改此设置,以便仅将第一列中具有“都柏林”的条目和最后一列中的 1 复制到新文件中。
我正在研究使用strcmp() 函数将第一列中的值与字符串“Dublin”进行比较,并使用此方法将最后一列中的整数与“1”进行比较,但我从来没有真正之前做过任何文件处理,所以我完全不知道从哪里开始。任何有关如何解决此问题的建议将不胜感激,谢谢
代码 - 将一个文件中的所有条目复制到另一个文件中
#include <stdio.h>
#include <stdlib.h> // For exit()
#include <conio.h>
int main()
{
FILE *fptr1;
FILE *fptr2;
char c;
char* filename = "C:\\Users\\uzair\\Desktop\\Comp-Programming 2\\customers.txt";
char* filename2 = "C:\\Users\\uzair\\Desktop\\Comp-Programming 2\\filtered_customers.txt";
// Open customers.txt file for reading
fptr1 = fopen(filename, "r");
if (fptr1 == NULL)
{
printf("Cannot open file %s \n", filename);
exit(0);
}
// Open file for writing
fptr2 = fopen(filename2, "w");
if (fptr2 == NULL)
{
printf("Cannot open file %s \n", filename2);
exit(0);
}
// Read contents from file
c = fgetc(fptr1);
while (c != EOF)
{
fputc(c, fptr2);
c = fgetc(fptr1);
}
printf("\nContents Copied From ---\n%s\nTo\n%s\nSuccessfully :)\n", filename, filename2);
fclose(fptr1);
fclose(fptr2);
return 0;
}
customers.txt
Dublin Dunne 865463389 21 1
Dublin Milford 865438990 22 0
Dublin Mowlds 876765443 24 1
Dublin Wang 873456789 22 1
Dublin Smith 875432234 25 1
Dublin Henry 876654429 22 0
Dublin Gupta 896765443 24 1
Wicklow Monahan 865432245 22 1
Wicklow Brunsdon 865678894 22 1
Wexford Tyson 865434566 22 0
Wexford Browne 865564766 20 1
Dublin Dunne 890065443 27 1
Dublin Connolly 876733999 20 0
Louth Jennings 987645673 60 1
Mayo Wang 876232123 29 1
【问题讨论】:
-
把你的工作分解成更简单的问题。用固定数据练习线分析,在你解决之前不要打扰文件。因此,声明一个包含样本数据的字符串,并首先计算出过滤条件。作为一个单独的问题,弄清楚如何从文件输入流中获取数据行。
-
printf("Cannot open file %s \n", filename2); exit(0);似乎是错误的,原因有几个。未能打开文件通常被认为是错误,因此该消息应被视为错误消息。但是错误消息应该写入标准错误。并且消息应该包括文件无法打开的原因。由于出现错误,我预计程序会失败。 IOW,这应该写成perror(filename2); exit(1); -
你知道吗,如果使用
stdin和stdout不仅可以在命令行中用重定向操作数指定输入输出文件,而且可以保存所有的打开和错误检测您在代码中硬连线的文件名?
标签: c file filtering text-files file-writing