예제 #1
0
파일: loader.c 프로젝트: fziliott/lsde
int main(int argc, char *argv[]) {
	char* person_input_file    = makepath(argv[1], "person",   "csv");
	char* interest_input_file  = makepath(argv[1], "interest", "csv");
	char* knows_input_file     = makepath(argv[1], "knows",    "csv");
	char* person_output_file   = makepath(argv[2], "person",   "bin");
	char* interest_output_file = makepath(argv[2], "interest", "bin");
	char* knows_output_file    = makepath(argv[2], "knows",    "bin");
	
	khiter_t k;
	int person_map_fd;
	struct stat st;

	if (argc < 3) {
		fprintf(stderr, "Usage: [csv input path] [output path]\n");
		exit(-1);
	}

	if (stat(argv[2], &st) == -1) {
    	if (mkdir(argv[2], 0700) != 0) {
			fprintf(stderr, "Unable to create output directory %s\n", argv[2]);
			exit(-1);
    	}
	}	

	// first pass person, parse person, write to binary and store bin offset in hash table
	person_offsets = kh_init(pht);	
	person = malloc(sizeof(Person));
	person->interest_n = person->knows_n = 0;
	person_out = open_binout(person_output_file);
	parse_csv(person_input_file, &person_line_handler);

	// mmap person.bin binary file for updates
	fclose(person_out);
	person_map_fd = open(person_output_file, O_RDWR);
	person_map = (Person *) mmap(0, person_offset * sizeof(Person), PROT_READ | PROT_WRITE, 
		MAP_SHARED, person_map_fd, 0);
	if (person_map_fd == 0 || person_map == MAP_FAILED) {
		fprintf(stderr, "Failed to map person binary.\n");
		exit(-1);
	}
	close(person_map_fd);

	// pass through interest and friends, write to binary, set offsets in person
	person_id = 0;
	interest_out = open_binout(interest_output_file);
	parse_csv(interest_input_file, &interest_line_handler);

	person_id = 0;
	knows_out = open_binout(knows_output_file);
	parse_csv(knows_input_file, &knows_line_handler);

	return 0;
}
예제 #2
0
int main(int argc, char *argv[]) {
    if (argc < 4) {
        fprintf(stderr, "Usage: [datadir] [query file] [results file]\n");
        exit(1);
    }
    /* memory-map files created by loader */
    person_map   = (Person *) mmapr(makepath(argv[1], "person3",   "bin"), &person_length);
    interest_map = (unsigned short *) mmapr(makepath(argv[1], "interest", "bin"), &interest_length);
    knows_map    = (unsigned int *) mmapr(makepath(argv[1], "knows3",    "bin"), &knows_length);

    outfile = fopen(argv[3], "w");
    if (outfile == NULL) {
        fprintf(stderr, "Can't write to output file at %s\n", argv[3]);
        exit(-1);
    }

    /* run through queries */
    parse_csv(argv[2], &query_line_handler);
    return 0;
}
예제 #3
0
파일: routine.cpp 프로젝트: dennisss/tansa
Routine *Routine::Load(string path, double scale) {

	Routine *p = NULL;

	if(hasExtension(path, ".csv")) {
		p = parse_csv(path.c_str(), scale);
	}
	else if(hasExtension(path, ".jocs") || hasExtension(path, ".js") || hasExtension(path, ".json")) {
		p = Jocs::Parse(path, scale);
	}

	FeasibilityChecker fc;
	if(p != NULL && !fc.check(*p)) {
		delete p;
		return NULL;
	}


	// Otherwise throw exception?
	return p;

}
예제 #4
0
int main(int argc, char *argv[])
{
    STANDARDIZER *std;
    LEXICON *lex;
    LEXICON *gaz;
    RULES *rules;

    char buf[1024];

    int seq;
    char input_str[ 4096 ] ;
    char word[512];
    char stdword[512];
    int token;
    int nr;
    int rule[RULESIZE];
    int err;
    int cnt;
    int option = 0;

    FILE *in;

    if (argc == 3 && !strcmp(argv[1], "-o")) {
        option = strtol(argv[2], NULL, 10);
        argc -= 2;
        argv += 2;
    }
    else if (argc != 1) 
        Usage();

    std = std_init();
    assert(std);

    lex = lex_init(std->err_p);
    assert(lex);

    in = fopen(LEXIN, "rb");
    assert(in);

    cnt = 0;
    while (!feof(in) && fgets(buf, 1024, in)) {
        cnt++;
        /* parse into fields */
        if (parse_csv(buf, &seq, word, stdword, &token)) {
            /* add the record to the lexicon */
            err = lex_add_entry(lex, seq, word, stdword, token);
            if (err != 1)
                printf("lex: Failed: %d: %s", cnt, buf);
        }
        else {
            printf("lex: Skipping: %d: %s", cnt, buf);
        }
    }
    fclose(in);

    if (option & 1) {
        printf("------------ address lexicon --------------\n");
        print_lexicon(lex->hash_table);
        printf("\n");
    }

    gaz = lex_init(std->err_p);
    assert(gaz);

    in = fopen(GAZIN, "rb");
    assert(in);

    cnt = 0;
    while (!feof(in) && fgets(buf, 1024, in)) {
        cnt++;
        /* parse into fields */
        if (parse_csv(buf, &seq, word, stdword, &token)) {
            /* add the record to the lexicon */
            err = lex_add_entry(gaz, seq, word, stdword, token);
            if (err != 1)
                printf("gaz: Failed: %d: %s", cnt, buf);
        }
        else {
            printf("gaz: Skipping: %d: %s", cnt, buf);
        }
    }
    fclose(in);

    if (option & 2) {
        printf("------------ gazeteer lexicon --------------\n");
        print_lexicon(gaz->hash_table);
        printf("\n");
    }

    rules = rules_init(std->err_p);
    assert(rules);
    rules -> r_p -> collect_statistics = TRUE ;

    /* ************ RULES **************** */

    in = fopen(RULESIN, "rb");
    assert(in);

    cnt = 0;
    while (!feof(in) && fgets(buf, 1024, in)) {
        cnt++;
        /* parse into fields */
        nr = parse_rule(buf, rule);

        /* add the record to the rules */
        err = rules_add_rule(rules, nr, rule);
        if (err != 0)
            printf("rules: Failed: %d (%d): %s", cnt, err, buf);
    }
    err = rules_ready(rules);
    if (err != 0)
        printf("rules: Failed: err=%d\n", err);
    fclose(in);

    std_use_lex(std, lex);
    std_use_gaz(std, gaz);
    std_use_rules(std, rules);
    std_ready_standardizer(std);

    printf( "Standardization test. Type \"exit\" to quit:\n" ) ;
    fflush( stdout ) ;
    while ( TRUE ) {
        err = standardize_command_line( std, input_str, option ) ;
        if ( err == FAIL ) {
            break ;
        }
    }
    printf( "OK\n" ) ;
    fflush( stdout ) ;

    std_free(std);
/* these were freed when we bound them with std_use_*()
    rules_free(rules);
    lex_free(gaz);
    lex_free(lex);
*/

    return 0;
}
예제 #5
0
void
orcqrencode(char *ctx)
{
	int version;
	int level;
	int hint;
	int size;
	int margin;
	int i;
	int doEncodeStructured;
	char buf[MAX_DATA_SIZE];
	char buf2[MAX_DATA_SIZE];
	char qrfile[SIZE_QRFILE];
	char qrfile_suffix[SIZE_QRFILE + 10];
	char *p;
	QRcode *code;
	QRcode_List *head, *entry;

OPENLOG;
	if((p = strchr(CTX(ctx, OFFSET_INFILE), ' ')) != NULL) *p = '\0';
	if((p = strchr(CTX(ctx, OFFSET_QRFILE), ' ')) != NULL) *p = '\0';

	memset(CTX(ctx, OFFSET_RET_CODE), QRENCODE_OK, SIZE_RET_CODE);

	if(euc2sjis(CTX(ctx, OFFSET_INFILE), buf) != 0){
		memset(CTX(ctx, OFFSET_RET_CODE), CHAR_CONV_ERROR, SIZE_RET_CODE);
		return;
	}

	hint = ctx_string2int(ctx, OFFSET_HINT, SIZE_HINT);

	if (hint < 2) {
		if(parse_csv(buf, buf2) !=0){
			memset(CTX(ctx, OFFSET_RET_CODE), KANA_CONV_ERROR, SIZE_RET_CODE);
			return;
		}
	} else {
		lf2crlf(buf,buf2);
	}

	snprintf(qrfile, SIZE_QRFILE, "%s", CTX(ctx, OFFSET_QRFILE));
	version = ctx_string2int(ctx, OFFSET_VERSION, SIZE_VERSION);
	if(version <= 0 || version > 40){
		memset(CTX(ctx, OFFSET_RET_CODE), PARAM_ERROR, SIZE_RET_CODE);
		return;	
	}
	switch(*CTX(ctx, OFFSET_LEVEL)){
		case 'L':
			level = QR_ECLEVEL_L;
			break;
		case 'M':
			level = QR_ECLEVEL_M;
			break;
		case 'Q':
			level = QR_ECLEVEL_Q;
			break;
		case 'H':
			level = QR_ECLEVEL_H;
			break;
		default:
			level = QR_ECLEVEL_L;
	}

	p = strrchr(qrfile, '.');
	if(p != NULL)*p = '\0';
	doEncodeStructured = ctx_string2int(ctx, OFFSET_STRUCTURED, SIZE_STRUCTURED);
	hint = (hint % 2) == 0 ? QR_MODE_KANJI : QR_MODE_8;
	size = ctx_string2int(ctx, OFFSET_PIXEL, SIZE_PIXEL);
	margin = ctx_string2int(ctx, OFFSET_MARGIN, SIZE_MARGIN);

	code = QRcode_encodeString(buf2, version, level, hint, 1);
	if (code != NULL) {
		if (code->version <= version) {
			snprintf(qrfile_suffix, sizeof(qrfile_suffix), 
				"%s_%02d.png", qrfile, 1);
			if(writePNG(code, qrfile_suffix, size, margin) != 0){
				memset(CTX(ctx, OFFSET_RET_CODE), WRITE_PNG_ERROR, SIZE_RET_CODE);
				QRcode_free(code);
				return;
			}
		SYSLOG("write single image");
			sprintf(buf, "%02d" , code->version);
			memcpy(CTX(ctx, OFFSET_RET_VERSION), buf, SIZE_RET_VERSION);
			sprintf(buf, "%02d" , 1);
			memcpy(CTX(ctx, OFFSET_RET_SYMBOLS), "01", SIZE_RET_SYMBOLS);
			QRcode_free(code);
			return;
		}
		QRcode_free(code);
	}
	if (doEncodeStructured) {
		head = QRcode_encodeStringStructured(buf2, version, level, hint ,1);
		if(head) {
			entry = head;
			i = 0;
			while(entry != NULL) {
				code = entry->code;
				snprintf(qrfile_suffix, 
					sizeof(qrfile_suffix), "%s_%02d.png", qrfile, i + 1);
				if(writePNG(code, qrfile_suffix, size, margin) != 0){
					memset(CTX(ctx, OFFSET_RET_CODE), WRITE_PNG_ERROR, SIZE_RET_CODE);
					break;
				}
				entry = entry->next;	
				i++;
			}
		SYSLOG("write multi images");
			QRcode_List_free(entry);
		}
		else {
			memset(CTX(ctx, OFFSET_RET_CODE), QRENCODE_ERROR, SIZE_RET_CODE);
		 	return;
		}
		sprintf(buf, "%02d" , head->code->version);
		memcpy(CTX(ctx, OFFSET_RET_VERSION), buf, SIZE_RET_VERSION);
		sprintf(buf, "%02d" , i);
		memcpy(CTX(ctx, OFFSET_RET_SYMBOLS), buf, SIZE_RET_SYMBOLS);
		QRcode_List_free(head);
	}
#if 1
	print_ctx(ctx);
#endif
SYSLOG("end");
	return;
}