X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=parselistscommand.cpp;h=4b24236e3497ab67f2be5299163798a9f43e8667;hb=7ae40733a270f73ec8a331540cc7f28fd60b24fc;hp=4838988346bb962d7ef91d32c483cf2e379f5895;hpb=74844a60d80c6dd06e3fb02ee9b928424f9019b0;p=mothur.git diff --git a/parselistscommand.cpp b/parselistscommand.cpp index 4838988..4b24236 100644 --- a/parselistscommand.cpp +++ b/parselistscommand.cpp @@ -42,7 +42,7 @@ ParseListCommand::ParseListCommand(string option) { it = parameters.find("list"); //user has given a template file if(it != parameters.end()){ - path = hasPath(it->second); + path = m->hasPath(it->second); //if the user has not given a path then, add inputdir. else leave path alone. if (path == "") { parameters["list"] = inputDir + it->second; } } @@ -50,7 +50,7 @@ ParseListCommand::ParseListCommand(string option) { it = parameters.find("group"); //user has given a template file if(it != parameters.end()){ - path = hasPath(it->second); + path = m->hasPath(it->second); //if the user has not given a path then, add inputdir. else leave path alone. if (path == "") { parameters["group"] = inputDir + it->second; } } @@ -83,7 +83,7 @@ ParseListCommand::ParseListCommand(string option) { label = validParameter.validFile(parameters, "label", false); if (label == "not found") { label = ""; allLines = 1; } else { - if(label != "all") { splitAtDash(label, labels); allLines = 0; } + if(label != "all") { m->splitAtDash(label, labels); allLines = 0; } else { allLines = 1; } } } @@ -97,7 +97,7 @@ ParseListCommand::ParseListCommand(string option) { //********************************************************************************************************************** void ParseListCommand::help(){ try { - m->mothurOut("The parse.list command reads a list and group file and generates a list file for each group in the groupfile \n"); + m->mothurOut("The parse.list command reads a list and group file and generates a list file for each group in the groupfile. \n"); m->mothurOut("The parse.list command parameters are list, group and label.\n"); m->mothurOut("The list and group parameters are required.\n"); m->mothurOut("The label parameter is used to read specific labels in your input you want to use.\n"); @@ -120,7 +120,7 @@ int ParseListCommand::execute(){ if (abort == true) { return 0; } //set fileroot - string fileroot = outputDir + getRootName(getSimpleName(listfile)); + string fileroot = outputDir + m->getRootName(m->getSimpleName(listfile)); vector outputNames; //fill filehandles with neccessary ofstreams @@ -132,7 +132,7 @@ int ParseListCommand::execute(){ string filename = fileroot + groupMap->namesOfGroups[i] + ".list"; outputNames.push_back(filename); - openOutputFile(filename, *temp); + m->openOutputFile(filename, *temp); } //if the users enters label "0.06" and there is no "0.06" in their file use the next lowest label. @@ -143,25 +143,39 @@ int ParseListCommand::execute(){ list = input->getListVector(); string lastLabel = list->getLabel(); + if (m->control_pressed) { + delete input; delete list; delete groupMap; + for (i=0; inamesOfGroups.size(); i++) { (*(filehandles[groupMap->namesOfGroups[i]])).close(); delete filehandles[groupMap->namesOfGroups[i]]; } + for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + return 0; + } + while((list != NULL) && ((allLines == 1) || (userLabels.size() != 0))) { + + if (m->control_pressed) { + delete input; delete list; delete groupMap; + for (i=0; inamesOfGroups.size(); i++) { (*(filehandles[groupMap->namesOfGroups[i]])).close(); delete filehandles[groupMap->namesOfGroups[i]]; } + for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + return 0; + } if(allLines == 1 || labels.count(list->getLabel()) == 1){ - parse(list); m->mothurOut(list->getLabel()); m->mothurOutEndLine(); - + parse(list); + processedLabels.insert(list->getLabel()); userLabels.erase(list->getLabel()); } - if ((anyLabelsToProcess(list->getLabel(), userLabels, "") == true) && (processedLabels.count(lastLabel) != 1)) { + if ((m->anyLabelsToProcess(list->getLabel(), userLabels, "") == true) && (processedLabels.count(lastLabel) != 1)) { string saveLabel = list->getLabel(); delete list; list = input->getListVector(lastLabel); //get new list vector to process - parse(list); m->mothurOut(list->getLabel()); m->mothurOutEndLine(); + parse(list); processedLabels.insert(list->getLabel()); userLabels.erase(list->getLabel()); @@ -177,6 +191,13 @@ int ParseListCommand::execute(){ list = input->getListVector(); //get new list vector to process } + if (m->control_pressed) { + delete input; delete groupMap; + for (i=0; inamesOfGroups.size(); i++) { (*(filehandles[groupMap->namesOfGroups[i]])).close(); delete filehandles[groupMap->namesOfGroups[i]]; } + for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + return 0; + } + //output error messages about any remaining user labels set::iterator it; bool needToRun = false; @@ -191,13 +212,20 @@ int ParseListCommand::execute(){ } + if (m->control_pressed) { + delete input; delete groupMap; + for (i=0; inamesOfGroups.size(); i++) { (*(filehandles[groupMap->namesOfGroups[i]])).close(); delete filehandles[groupMap->namesOfGroups[i]]; } + for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + return 0; + } + //run last label if you need to if (needToRun == true) { if (list != NULL) { delete list; } list = input->getListVector(lastLabel); //get new list vector to process - parse(list); m->mothurOut(list->getLabel()); m->mothurOutEndLine(); + parse(list); delete list; } @@ -207,7 +235,14 @@ int ParseListCommand::execute(){ delete it3->second; } + delete groupMap; + delete input; + + if (m->control_pressed) { + for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } + return 0; + } m->mothurOutEndLine(); m->mothurOut("Output File Names: "); m->mothurOutEndLine(); @@ -222,7 +257,7 @@ int ParseListCommand::execute(){ } } /**********************************************************************************************************************/ -void ParseListCommand::parse(ListVector* thisList) { +int ParseListCommand::parse(ListVector* thisList) { try { map groupVector; @@ -237,12 +272,13 @@ void ParseListCommand::parse(ListVector* thisList) { for (int i = 0; i < thisList->getNumBins(); i++) { + if (m->control_pressed) { return 0; } map groupBins; string bin = list->get(i); vector names; - splitAtComma(bin, names); //parses bin into individual sequence names + m->splitAtComma(bin, names); //parses bin into individual sequence names //parse bin into list of sequences in each group for (int j = 0; j < names.size(); j++) { @@ -270,7 +306,8 @@ void ParseListCommand::parse(ListVector* thisList) { for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) { (*(filehandles[it3->first])) << thisList->getLabel() << '\t' << groupNumBins[it3->first] << '\t' << groupVector[it3->first] << endl; // label numBins listvector for that group } - + + return 0; } catch(exception& e) {