int clear_gis_rast() { gis_rast.ghead.zmin = 0; gis_rast.ghead.zmax = 0; gis_rast.ghead.xmin = 0; gis_rast.ghead.xmax = 0; gis_rast.ghead.ymin = 0; gis_rast.ghead.ymax = 0; gis_rast.ghead.resolution = 0; gis_rast.ghead.wxmin = 0; gis_rast.ghead.wxmax = 0; gis_rast.ghead.wymin = 0; gis_rast.ghead.wymax = 0; gis_rast.ghead.wresolution = 0; gis_rast.ncats = 0; free_char_matrix ( gis_rast.cvals ); free_char_matrix ( gis_rast.cnames ); gis_rast.cvals = 0; gis_rast.cnames = 0; return 0; }
int clear_gis_image() { gis_image.ghead.zmin = 0; gis_image.ghead.zmax = 0; gis_image.ghead.xmin = 0; gis_image.ghead.xmax = 0; gis_image.ghead.ymin = 0; gis_image.ghead.ymax = 0; gis_image.ghead.resolution = 0; gis_image.ghead.wxmin = 0; gis_image.ghead.wxmax = 0; gis_image.ghead.wymin = 0; gis_image.ghead.wymax = 0; gis_image.ghead.wresolution = 0; free_char_matrix ( (char **) gis_image.ivals ); gis_image.ivals =0; return 0; }
int main(int argc, char **argv) { int i, j, k; int line, dim, max_byte; int split, *num = NULL; char **buffer; char ofname[NAME_LEN] = {'\0'}, str[NAME_LEN] = {'\0'}; FILE *fp = NULL; /* 引数の確認 */ if(argc < 4){ fprintf(stderr, "\n[使用法] : file_split <file> [-q (num) / -s (M) (n1)...(nM)] (-o (str))\n"); exit(1); } strcpy(ofname, argv[1]); if(is_opt(argc, argv, "-o")) strcpy(ofname, get_char_arg(argc, argv, "-o")); /* 1行当たりのバイト数の最大値とデータの行の総数を調べる */ get_max_byte(argv[1], &max_byte); get_size(argv[1], &dim, &line); /* データの分割数を設定する */ if(is_opt(argc, argv, "-q")){ split = get_int_arg(argc, argv, "-q"); num = new_int_vector(split); for(i = 0; i < split; i++) num[i] = line / split; for(i = 0; i < (line % split); i++) num[i]++; } else if(is_opt(argc, argv, "-s")){ num = get_int_arg_list(argc, argv, "-s", &split); j = 0; for(i = 0; i < split; i++) j += num[i]; if(j != line){ fprintf(stderr, "\n[エラー] : 指定された分割方法は正しくありません\n"); exit(1); } } else{ fprintf(stderr, "\n[エラー] : 分割方法を必ず指定して下さい\n"); exit(1); } /* データを確保するための配列を準備する */ buffer = new_char_matrix(line, sizeof(char)*(max_byte + 2)); for(i = 0; i < line; i++) for(j = 0; j <= sizeof(char)*max_byte + 1; j++) buffer[i][j] = '\0'; /* ファイルからデータを読み込む */ if((fp = fopen(argv[1], "r")) == NULL){ fprintf(stderr, "\n[エラー] : ファイル %s が開けません\n", argv[1]); exit(1); } for(i = 0; i < line; i++){ for(j = 0; j <= max_byte*sizeof(char); j++){ fscanf(fp, "%c", &buffer[i][j]); if(buffer[i][j] == '\n') break; } } fclose(fp); /* 指定された方法によりデータを分割する */ line = 0; for(i = 0; i < split; i++){ sprintf(str, "%s_%d", ofname, i+1); if((fp = fopen(str, "w")) == NULL){ fprintf(stderr, "\n[エラー] : ファイル %s が開けません\n", str); exit(1); } for(j = 0; j < num[i]; j++){ for(k = 0; k <= max_byte*sizeof(char); k++){ fprintf(fp, "%c", buffer[line + j][k]); if(buffer[line + j][k] == '\n') break; } } fclose(fp); line += num[i]; } /* 作業用の配列を解放 */ free_char_matrix(buffer); free_int_vector(num); exit(0); }