TocI 2020-06-30 22:48 采纳率: 100%
浏览 131
已采纳

请问C实现数据文件的逆序处理

1:准备用C对一个数据文件(500M左右大小)进行逆序处理,即按照行从尾向头进行存储。
例如:
转换前处理为转换后

2:目前我是采用双向链表的方式进行实现的,代码如下:

int MainNegativeSeqPatrolLoc(char FilePath[], char PosName[], char NegName[])
{
    struct st {
        char c[4096];
        struct st *up;
        struct st *down;
    }*head, *tp, *next;

    head = (struct st*)malloc(sizeof(struct st));
    char FilePos[300] = { " " };
    strcpy(FilePos, FilePath);
    strcat(FilePos, PosName);
    FILE *fPPOS = fopen(FilePos, "rb");

    char FileNeg[300] = { " " };
    strcpy(FileNeg, FilePath);
    strcat(FileNeg, NegName);
    FILE *fPNEG = fopen(FileNeg, "wb");
    tp = head;
    tp->up = head;

    while (!feof(fPPOS))
    {
        next = (struct st*)malloc(sizeof(struct st));
        fgets(next->c, 768, fPPOS);
        tp->down = next;
        next->up = tp;
        tp = next;
    }
    tp->down = NULL;
    while (tp->up != head)
    {
        fputs(tp->c, fPNEG);
        tp = tp->up;
    }
    fputs(tp->c, fPNEG);

    free(head);
    free(tp);

    fclose(fPPOS);
    fclose(fPNEG);
    return 1;
}

3:问题-想请教是否还有更加高效快速的方式?想让大神帮一帮忙。

最后,再次谢谢浏览和帮助的小伙伴~~~

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-07-01 15:35
    关注

    500MB的文件,简单暴力直接在内存里面读取,装入双向链表,再从后往前写入文件。
    文本文件不能随机定位,所以一次性从头往后读取,再写入,虽然费内存但是肯定高效。而且现在的计算机都有16GB甚至更多的内存,区区500MB,也就是0.5GB非常微不足道。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用