我正在尝试编写一个程序(显然是新的程序),它检查输入文件以确保它符合指定的格式。输入文件应该是csv格式,前两行分别以名称“Class”和“Subject”开头。 我知道在第二行开头检查“主题”标识会有点复杂,但我想我可以通过计算输入数据集的大小来确定输入数据集的维度,从而开始读取/检查字符串的位置。逗号和换行符的数量。 但是,我对如何确保前六个字符是“Class”有点困惑。 我第一次只想弄清楚如何扫描前六个字符中的逗号(见下文),然后我就卡在那里了。
// search the first six characters for "Class,"
FILE *input;
int character;
int comma_check = 0;
int i = input[i];
while (i < 6)
{
character = fgetc(input);
if (character == ',')
{
comma_check++;
}
}
if (comma_check == 0)
{
printf("Input file is not in the correct format.\n");
return 1;
fclose(input);
}
我已经阅读了一些帖子,这些帖子提示了如何在屏幕上打印(虽然我还没想出如何只打印指定数量的字符而不是文件的末尾),但我不知道我不知道如何将前六个字符保存到一个字符串中,然后我可以将它与“Class”进行比较。任何帮助或建议将不胜感激。提前谢谢!
编辑:谢谢你的帮助。那讲得通。所以类似地,如果我想检查文件的结尾是否有换行符或回车符,我可以这样做,对吗?fseek(input, -2, SEEK_END);
char buf1[3] = {0};
if ((strncmp(buf1, "\n,", 2) == 0) || (strncmp(buf1, "\r,", 2) == 0))
{
return 4;
fclose(input);
}
这似乎是合乎逻辑的(\ n和\ r每个都是2个字节,右边),但它似乎没有用。
答案 0 :(得分:0)
使用fread
读取前6个字符并将其与密钥进行比较。例如:
FILE *input;
int match = 0;
char buf[7] = { 0 };
input = fopen("variation_format_help.txt", "r");
if (!input)
{
printf("error\n");
return 0;
}
fread(buf, 1, 6, input);
if (strncmp(buf, "Class,", 6) == 0)
{
match = 1;
printf("%s match\n", buf);
}
此时您可以关闭文件或继续阅读文件。如果您想返回文件的开头然后调用fseek(input, 0, 0);
,则无需关闭该文件并再次打开它。