c Excel、Txt文件读写

    有时需要将信息保存在Excel、Txt中,并且需要判断去重操作,重复时进行覆盖,不同时则在文件尾部写入。下述为自己写的一个例子:其中split为字符串分割函数,利用fseek进行重写数据的定位操作。

void writeExcel()
{
    char buf[512] = {0};
    int line_len = 0;
    int len = 0;
    int res;
    FILE *pFile = nullptr;
    pFile = fopen("G:\\test.csv","r+");      // Excel/txt相同,只需换后缀名即可
    if (!pFile)
    {
        pFile = fopen("G:\\test.csv", "w");        // 如果文件不存在,则写入文件;如果文件存在,则用r+,读写模式,w会覆盖原来的内容,从开头开始写
    }
    
    char *pTemp = fgets(buf, sizeof(buf), pFile);
    line_len = strlen(buf);                           
    
    if (pTemp == nullptr)
    {
        fprintf(pFile, "%c,%d\n", 'a', 0);
        fprintf(pFile, "%c,%d\n", 'b', 0);
        fprintf(pFile, "%c,%d\n", 'c', 0);
        fprintf(pFile, "%c,%d\n", 'd', 0);
    }
    else
    {
         len = len + line_len + 1;    // 加1表示回车符
        while (pTemp)
        {
            vector<string> vecBuf = split(buf, ',');
            const char *first = vecBuf[0].c_str();
            if ('c' == *first)
            {
                len = len - line_len - 1 ;
                res = fseek(pFile, len, SEEK_SET);    // len 从头开始到此为止长度
                printf("%d\n", res);
                fprintf(pFile, "%c,%d\n", 'd', 1);    // 重写一行数据
                break;
            }
            else
            {
                pTemp = fgets(buf, sizeof(buf), pFile);
                line_len = strlen(buf) ;
                len = len + line_len + 1;
            }
        }
        if ( nullptr == pTemp )
        {
            fprintf(pFile, "%c,%d\n", 's', 1);
        }
    }

       /*利用ftell进行定位,注意换行符*/

    /*else
    {
        while (pTemp)
        {
            vector<string> vecBuf = split(buf, '\t');
            const char *first = vecBuf[0].c_str();
            if ('a' == *first)
            {    
                len = ftell(pFile) - line_len - 1;    
                res = fseek(pFile, len, SEEK_SET);
                printf("%d\n", res);
                fprintf(pFile, "%c\t%d\n", 'd', 1);
                break;
            }
            else
            {
                pTemp = fgets(buf, sizeof(buf), pFile);
                line_len = strlen(buf);
                len += line_len;
            }
            if (pTemp == nullptr)
            {
                fprintf(pFile, "%c\t%d\n", 's', 1);
            }
        }
    }*/
    

    fclose(pFile);
}

完整例子链接:https://download.csdn.net/download/silence_lu_/10589411

猜你喜欢

转载自blog.csdn.net/silence_lu_/article/details/81488630