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 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)