如何读取文件并比较C中的值?

时间:2017-05-17 07:55:00

标签: c file fork

我需要知道如何读取具有不同行中值的文件,并将其与内存中的值进行比较,以获得更好的分数,如果内存中的值最佳,请将这些值插入文件(文件以读取和写入的方式同时打开,因为这部分代码可以同时从几个fork()运行):

if (PuntuacioEquip(jugadors)>MaxPuntuacio && CostEquip(jugadors)<PresupostFitxatges)
    {

        //Compare with file
        int fd, n;
        TBestEquip info;

        fd = open("best_teams.txt", O_RDONLY);
        if (fd<0) panic("open");

        while ((n=read(fd, &info, sizeof(info))) == sizeof(info)) {
            //printf(cad,"equip %lld, puntuacio %d\n", info.Equip, info.Puntuacio);
            //write(1,cad,strlen(cad));
            if (info.Puntuacio>PuntuacioEquip(jugadors))
                {
                    fd = open("best_teams.txt", O_WRDONLY|O_TRUNC|O_CREAT,0600);
                    if (fd<0) panic("open");
                    sprintf(cad,"%s Cost: %d  Points: %d. %s\n", CostEquip(jugadors), PuntuacioEquip(jugadors));
                    write(fd,cad,strlen(cad));
                }
        }


        // We have a new partial optimal team.
        MaxPuntuacio=PuntuacioEquip(jugadors);
        memcpy(MillorEquip,&jugadors,sizeof(TJugadorsEquip));
        sprintf(cad,"%s Cost: %d  Points: %d. %s\n", color_green, CostEquip(jugadors), PuntuacioEquip(jugadors), end_color);
        write(1,cad,strlen(cad));


    }

感谢任何帮助。

此致

1 个答案:

答案 0 :(得分:0)

迭代文件的最佳方法是使用函数getline()。以下是它的使用示例,取自this post,我建议您阅读。

char const* const fileName = "best_teams.txt" ; // 
FILE* file = fopen(fileName, "r"); /* should check the result */
if (file != NULL) {

    char line[256];
    while (getline(line, sizeof(line), file)) { // Each iteration, a line will be stored in string `line`
           // Do what you want to do
   } // Exits when arrives at the end of the file
else puts("Error while opening file\n");

根据评论中的建议,您可以使用fopen("best_teams.txt", "w") “w”表示写入模式,在fopen documentation中描述如下:

  

创建一个用于写入的空文件。如果已存在同名文件,则会删除其内容,并将该文件视为新的空文件。

另一个解决方案是在读写模式下打开,只改变你想要的值,但它可能更复杂。