69,382
社区成员
发帖
与我相关
我的任务
分享
#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;
}