检查csv文件中的前六个字符是否有特定的序列

时间:2016-09-16 05:04:15

标签: c string file character

我正在尝试编写一个程序(显然是新的程序),它检查输入文件以确保它符合指定的格式。输入文件应该是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个字节,右边),但它似乎没有用。

1 个答案:

答案 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);,则无需关闭该文件并再次打开它。