需要帮助阅读C语言的文件

时间:2015-02-18 16:50:34

标签: c

当我尝试用C语言读取文件时,我遇到了问题。

这是我的文件.txt格式

1,325.1.1, ,,,,4,5.0,9.0,10.0
2-5,354.1.1, ,,,,3,5.0,10.0,9.0
,111.1.1, ,,,,3,4.0,8.0,6.0
,646.1.1, ,,,,3,3.0,7.0,9.0
,132.1.1, ,,,,3,3.0,7.0,6.0
6-7,234.1.1, ,,,,2,4.0,9.0,5.0
,321.1.1, ,,,,2,4.0,7.0,5.0
8-11,567.1.1, ,,,,1,5.0,8.0,1.0
,123.1.1, ,,,,1,4.0,8.0,4.0
,324.1.1, ,,,,1,4.0,8.0,4.0
,456.1.1, ,,,,1,4.0,8.0,1.0
12,666.1.1, ,,,,0,3.0,7.0,0.0

我可以很好地阅读第一行和第二行,因为它们以整数开头,但是当我转到第三行时,我无法读取它,因为它以逗号开头。 你能帮助我解决这个问题吗?

这是我的代码,用于读取所有行并将它们保存在结构数组中。

int main()
{
    FILE *fp;
    INFORMACAO *inf;
    if((inf=(INFORMACAO *)malloc(NMAX_INFORMACAO*sizeof(INFORMACAO)))==NULL) return 0;
    fp=fopen("111.1.1.txt","r");
    if(fp == NULL)
    {
        printf("\n[ERROR]File not Found");
        return (0);
    }
    else
    {
        while(!feof(fp))
        {
            fscanf(fp,"%d,%d.%d.%d, ,,,,%d,%f,%f,%f\n",&inf[0].id_escola,&inf[0].ciclo,&inf[0].jogo,&inf[0].pontuacao,&inf[0].desempate1,&inf[0].desempate2,&inf[0].desempate3);
            i++;
        }
    }

1 个答案:

答案 0 :(得分:1)

这个地方很累人;为了一个合理的问题而无视下来的选票...

基本上,这是一个需要您parse输入字符串并智能转换数据的问题。 fscanf不会免费为您提供此功能,因此您需要标记输入(使用建议的strtok())并处理该操作的结果。

如果您不了解该术语,则该文件格式通常称为 CSV (或逗号分隔值),因此您可能会发现一些有用的资源,如果您使用短语 C解析 C CSV解析 C标记化

搜索信息