热烈庆祝本人受关注人数即将突破14000大关!散分!!+超大文件排序源代码

赵4老师 2017-12-05 02:17:49

L2B.c:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int MAXLEN=1000;
char *ln,*ln1;
FILE *fi,*fo;
int i;
int b,n,L,maxL;
char fullpathi[_MAX_PATH];
char fullpatho[_MAX_PATH];
int main(int argc,char **argv) {
if (argc<3) {
printf("Usage:L2B Line_filename.ext Block_filename.ext\nConvert Line file to Block file.\n Line file: Length difference per line.\n Block file: Fixed length of all line with space appended.");
return 1;
}
if (NULL==_fullpath(fullpatho,argv[2],_MAX_PATH)) {
printf("Can not get fullpath of %s!\n",argv[2]);
return 2;
}
fo=fopen(fullpatho,"r");
if (NULL!=fo) {
fclose(fo);
printf("File [%s] is exists!\n",argv[2]);
return 3;
}
if (NULL==_fullpath(fullpathi,argv[1],_MAX_PATH)) {
printf("Can not get fullpath of %s!\n",argv[1]);
return 4;
}
fi=fopen(fullpathi,"r");
if (NULL==fi) {
printf("Can not open file [%s]!\n",argv[1]);
return 5;
}
ln=(char *)malloc(MAXLEN);
if (NULL==ln) {
fclose(fi);
printf("Can not malloc(%d)!\n",MAXLEN);
return 6;
}
n=0;
maxL=0;
ln1=NULL;
while (1) {
if (NULL==fgets(ln,MAXLEN,fi)) break;
if (ln1) {
ln=ln1;
MAXLEN*=2;
ln1=NULL;
}
L=strlen(ln);
if ('\n'==ln[L-1]) {
if (maxL<L) maxL=L;
n++;
if (0==n%1000) cprintf("\r%d",n);
} else {
ln1=(char *)realloc(ln,2*MAXLEN);
if (NULL==ln1) {
free(ln);
fclose(fi);
printf("Can not realloc(%p,%d)!\n",ln,2*MAXLEN);
return 7;
}
ln=ln1+MAXLEN-1;
}
}
fo=fopen(fullpatho,"w");
if (NULL==fo) {
free(ln);
fclose(fi);
printf("Create File [%s] error!\n",argv[2]);
return 8;
}
rewind(fi);
for (i=0;i<n;i++) {
if (NULL==fgets(ln,MAXLEN,fi)) break;
L=strlen(ln);
if (maxL>L) memset(ln+L-1,' ',maxL-L);
ln[maxL-1]=0;
fprintf(fo,"%s\n",ln);
if (0==i%1000) cprintf("\r%d/%d",i,n);
}
fclose(fo);
free(ln);
fclose(fi);
cprintf("\r");
printf("%d lines width %d per line total %I64u bytes write to Block file:[%s]\n",n,maxL+1,(unsigned __int64)n*(maxL+1),argv[2]);
return 0;
}

...全文
2090 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
南瓜猴 2018-03-23
  • 打赏
  • 举报
回复
Hi,老师,我现在碰到一个问题,就是如何修改拖曳文件的打开顺序,毫无头绪现在。求老师解答。 现有思路:修改HDROP指向的内存内容,但不知道如何操作。想要用PostMessage模拟WM_DROPFILES消息,但是不知怎么构造参数 帖子地址:https://bbs.csdn.net/topics/392345182 私信功能不行了,只能来这里找您了
  • 打赏
  • 举报
回复
谢谢分享,赵老师
赵4老师 2018-02-08
  • 打赏
  • 举报
回复
引用 55 楼 flagoop 的回复:
千万中取首,如梭,如风,如闪电


flagoop 2018-01-21
  • 打赏
  • 举报
回复
千万中取首,如梭,如风,如闪电
MiyawakiSakura 2018-01-17
  • 打赏
  • 举报
回复
试试
csdn967 2018-01-03
  • 打赏
  • 举报
回复
【让窗体永远在前面】 有时候你希望某个窗体永远在前面,使用【csdn967】程序能够帮你做到! 求你们也去关注一下me===CSDN967
zhh_crazy 2017-12-29
  • 打赏
  • 举报
回复
好厉害,膜拜尼古拉斯·赵老师
球磨川禊 2017-12-24
  • 打赏
  • 举报
回复
额额额顶一个
及勒 2017-12-19
  • 打赏
  • 举报
回复
恭喜恭喜,我也关注下大佬
qq_27861769 2017-12-19
  • 打赏
  • 举报
回复
LXL110306 2017-12-12
  • 打赏
  • 举报
回复
引用 40 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
赵老师说的对啊
赵4老师 2017-12-11
  • 打赏
  • 举报
回复
WindowsXP,如果磁盘上有1TB的数据需要排序,但只有1GB的内存,你怎么做?
归途醉染 2017-12-11
  • 打赏
  • 举报
回复
赵老师,我来看望您老人家
Allensb 2017-12-08
  • 打赏
  • 举报
回复
cs14789652 2017-12-07
  • 打赏
  • 举报
回复
引用 40 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
路过学习,事实上也是“做到才能得到”
Itachi_zheng 2017-12-06
  • 打赏
  • 举报
回复
厉害了。一直被模仿,
jena_wy 2017-12-06
  • 打赏
  • 举报
回复
heronism 2017-12-06
  • 打赏
  • 举报
回复
还没仔细研究,不过赵老师出版,必属佳品!
runningfatty 2017-12-06
  • 打赏
  • 举报
回复
加载更多回复(36)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧