Skip to content

Commit

Permalink
!!
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrey committed Jan 22, 2012
1 parent 46e3c4c commit 346a53e
Showing 1 changed file with 21 additions and 104 deletions.
125 changes: 21 additions & 104 deletions SortFiles/src/SortFiles.c
Expand Up @@ -23,31 +23,7 @@ static struct vector{
} int_arr;

static off_t file_size;
static int uk_symb;
static int input_handle;
static char is_availible = 1;
static int read_count;

inline u_char get_next_symb(u_char buffer[], int size) {
is_availible = 1;
if (uk_symb % size == 0) {
read_count = read(input_handle, buffer, size);
if (read_count == 0) {
is_availible = 0;
if (uk_symb != file_size) {
fprintf(stderr, "can't read file till the end");
}
return 0;
}
}
if (uk_symb % size >= read_count) {
is_availible = 0;
return 0;
}
uk_symb++;
return buffer[(uk_symb - 1) % size];

}

int compare(const void * a, const void * b) {
return (*(int*) a - *(int*) b);
Expand All @@ -73,93 +49,32 @@ void int_buffer_add(int val) {

}

void populate()
/*
* Чтение делаю ручками потому что нужно обрабатывать слишком большие числа а также мусор в файлах
*/

{
long long now = 0;
uk_symb=0;
is_availible=1;

int state = 0;
char min = 1;
/*
0: deafult
1: - on start
2: число уже идёт
3: игнорить число
*/
while (is_availible) {
u_char symb = get_next_symb(buffer, BF_SIZE);
if(!is_availible)
break;
switch (state) {
case 0:
now = 0;
if (symb == '-') {
min = -1;
state = 1;
} else if (symb >= '0' && symb <= '9') {
min = 1;
now = symb - '0';
state = 2;
} else {

//fprintf(stderr, "bad symbol %c at %d\n", symb, (int) uk_symb);
}
break;
case 1:

case 2:
if (symb >= '0' && symb <= '9') {
state = 2;
now = now * 10 + symb - '0';
if (now & 0xFFFF80000000) {
/* fprintf(stderr,
"value in bad range at %d\n, ignoring next digits",
(int) uk_symb);*/
now = now / 10;
int_buffer_add(now * min);
state = 3;
}
} else {
if (state != 1)
{
int_buffer_add(now * min);
state = 0;
}
//if (!isblank(symb));
/*fprintf(stderr, "bad symbol %c at %d\n", symb,
(int) uk_symb);*/
}

break;
case 3:
if (!(symb >= '0' && symb <= '9')) {
state = 0;

}
break;
}

}
}



int addfile(char *filename) {
struct stat st;
uk_symb=0;


if (stat(filename, &st) == -1) {
fprintf(stderr, "can't stat file %s\n", filename);
return EXIT_FAILURE;
}
file_size = st.st_size;
input_handle = open(filename, O_RDONLY);
populate();
close(input_handle);


FILE *input_handle = fopen(filename, "rt");

int now;
int add_now=0;

while (fscanf(input_handle, "%d",&now) !=0&& feof(input_handle) == 0)
{
int_buffer_add(now); add_now++;
}
if(feof(input_handle) == 0)
{
int_arr.count-=add_now;
}

fclose(input_handle);
return 0;
}

Expand Down Expand Up @@ -200,8 +115,10 @@ int main(int argc, char **argv) {

}
}

array_sort(int_arr.arr,int_arr.count);


if(out_file_name == 0 || (out=fopen(out_file_name,"wt"))==0)
{

Expand Down

0 comments on commit 346a53e

Please sign in to comment.