-
Notifications
You must be signed in to change notification settings - Fork 5
/
seperate.c
80 lines (76 loc) · 2.26 KB
/
seperate.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "seperate.h"
long get_file_lines(char filename[]) {
FILE* fp=fopen(filename,"r");
char input[20];
long sum=0;
while (fscanf(fp,"%s",input) != EOF)
{
sum++;
if(sum<0)
{
printf("Trace length is out of 32 bit integer type\n");
return -1;
}
}
fclose(fp);
return sum;
}
long seperate_textfile(char filename[], int processor_number, long lines) {
FILE* fp = fopen(filename,"r");
char input[20];
long sum = lines;
int i;
long tstart,tend;
long tim;
for (i = 0; i < processor_number; ++i) {
FILE* fw = fopen(parda_generate_pfilename(filename, i, processor_number), "w");
tstart = parda_low(i, processor_number, sum);
tend = parda_high(i, processor_number, sum);
for ( tim = tstart; tim <= tend; ++tim) {
assert(fscanf(fp, "%s", input) != EOF);
int len = strlen(input);
if(len >= 20) {
printf("line %ld length is larger than SLEN, please make sure all line less than SLEN\n",tim+1);
//return -2;
}
fprintf(fw, "%s\n", input);
}
fclose(fw);
}
fclose(fp);
return sum;
}
long seperate_binaryfile(char filename[],int processor_number,long lines) {
FILE* fp = fopen(filename,"rb");
long sum = lines;
int i;
long tstart, tend;
long t, count;
void** buffer = (void**)malloc(buffersize * sizeof(void*));
for (i = 0; i < processor_number; ++i) {
FILE* fw = fopen(parda_generate_pfilename(filename, i, processor_number), "wb");
tstart = parda_low(i, processor_number, sum);
tend = parda_high(i, processor_number, sum);
for(t = tstart; t <= tend; t += count) {
count = min(tend + 1 - t, buffersize);
count = fread(buffer, sizeof(void*), count, fp);
fwrite(buffer, sizeof(void*), count, fw);
}
fclose(fw);
}
fclose(fp);
return sum;
}
long parda_seperate_file(char inputFileName[], int processor_number, long lines) {
if (lines == -1)
lines = get_file_lines(inputFileName);
int psize = processor_number;
if(!is_binary) seperate_textfile(inputFileName, psize, lines);
else seperate_binaryfile(inputFileName, psize, lines);
char linesFile[50];
sprintf(linesFile, "%s_lines_%ld.txt", inputFileName, lines);
FILE* tfile = fopen(linesFile,"w");
fprintf(tfile, "%ld", lines);
fclose(tfile);
return lines;
}