const bool CFileLister::list(const std::string &p_path) { // Open dir DIR *l_dir = opendir(p_path.c_str()); if (l_dir == NULL) { std::cerr << "CFileLister::list: Error opening dir " << p_path << std::endl; return false; } // Clean up m_listFiles.clear(); m_listDirs.clear(); // Read dir std::string l_file(""); std::string l_fileFull(""); struct stat l_stat; struct dirent *l_dirent = readdir(l_dir); while (l_dirent != NULL) { l_file = l_dirent->d_name; // Filter the '.' and '..' dirs if (l_file != "." && l_file != "..") { // Stat the file l_fileFull = p_path + "/" + l_file; if (stat(l_fileFull.c_str(), &l_stat) == -1) { std::cerr << "CFileLister::list: Error stat " << l_fileFull << std::endl; } else { // Check type if (S_ISDIR(l_stat.st_mode)) // It's a directory m_listDirs.push_back(T_FILE(l_file, l_stat.st_size)); else // It's a file m_listFiles.push_back(T_FILE(l_file, l_stat.st_size)); } } // Next l_dirent = readdir(l_dir); } // Close dir closedir(l_dir); // Sort lists sort(m_listFiles.begin(), m_listFiles.end(), compareNoCase); sort(m_listDirs.begin(), m_listDirs.end(), compareNoCase); // Add "..", always at the first place m_listDirs.insert(m_listDirs.begin(), T_FILE("..", 0)); return true; }
int main (int argc, char** argv) { char *kfile, *tfile, *cfile, *tafile, *lfile; size_t ksize, tsize, iter, depth; // FILE *kout, *tout; char opt; graph_t **gtrain; int* target; FILE* fileTrain, *fileResult, *fileTarget; core_t core; gtrain = NULL; lfile = tafile = cfile = kfile = NULL; depth = 3; CLEAR_FLAGS(); SET_RUNNABLE(); ksize = tsize = 0; core = TanimotoCore; while((opt = getopt(argc, argv, "mvihd:k:t:c:a:l:")) != -1) { switch(opt){ case 'v': SET_VERBOSE(); break; case 'i': SET_INFO(); break; case 'd': depth = strtol((const char*) optarg, 0, 10); break; case 'k': SET_K_FILE(); kfile = optarg; break; case 't': SET_T_FILE(); tfile = optarg; break; case 'c': SET_C_FILE(); cfile = optarg; break; case 'a': SET_TA_FILE(); tafile = optarg; break; case 'l': SET_L_FILE(); lfile = optarg; break; case 'h': SET_HELP(); break; case 'm': SET_PROVA_MINMAX(); break; default: SET_HELP(); } } if(HELP()) { usage(); CLEAR_FLAGS(); } if(INFO()) { info(); CLEAR_FLAGS(); } if(optind < argc) { if(!strcmp(argv[optind], "tanimoto")) { printf("tanimoto kernel\n"); } else if(!strcmp(argv[optind], "minmax")) { printf("minmax kernel\n"); core = MinMaxCore; } else printf("unavailable core ...\ndefault core: tanimoto\n"); } //else //printf("default core: tanimoto\n"); if(RUNNABLE()) { if(K_FILE() && T_FILE()) { if((fileTrain = fopen(kfile, "r")) && (fileTarget = fopen(tfile, "r"))) { gtrain = parse(fileTrain, &ksize); fclose(fileTrain); target=parseTarget(fileTarget, ksize); fclose(fileTarget); if(target==0) printf("\ncheck training file and target file"); else FoldCrossValidation(core, gtrain, target, ksize, depth); for(iter = 0; iter < ksize; iter++) free_graph(gtrain[iter]); XFREE(gtrain); XFREE(target); }else fatal("unable to open training file"); } if(TA_FILE() && C_FILE()) { fileResult = fopen(cfile, "r"); fileTarget = fopen(tafile, "r"); printf("\nAccuratezza: %f\n", getAccuracy(fileTarget, fileResult)); fclose(fileResult); fclose(fileTarget); } /* if(L_FILE()) { file = fopen(lfile, "r"); printf("\nLeaveOneOut: %f\n", getLeaveOneOut(file)); fclose(file); } */ if(K_FILE() && !T_FILE()) { if((fileTrain = fopen(kfile, "r"))) { gtrain = parse(fileTrain, &ksize); fclose(fileTrain); print_graph(gtrain[0]); print_graph(gtrain[1]); if(gtrain==0) printf("\ncheck training file"); else WriteKernelMatrix(core, gtrain, ksize, depth); for(iter = 0; iter < ksize; iter++) free_graph(gtrain[iter]); XFREE(gtrain); }else fatal("unable to open training file"); } if(PROVA_MINMAX()) { printf("\nPROVA MIN MAX\n"); fileTrain = fopen("./minmax.mol2", "r"); gtrain = parse(fileTrain, &ksize); //print_graph(gtrain[0]); //print_graph(gtrain[1]); print_graph(gtrain[0]); print_graph(gtrain[1]); printf("\nMinMax: %f", MinMaxCore(gtrain[0], gtrain[1], 3)); //printf("\nTanimoto: %f", TanimotoCore(gtrain[0], gtrain[1], 3)); fclose(fileTrain); } } //else usage(); return EXIT_SUCCESS; }