]> git.donarmstrong.com Git - mothur.git/blobdiff - parselistscommand.cpp
moved utilities out of mothur.h and into mothurOut class.
[mothur.git] / parselistscommand.cpp
index 4838988346bb962d7ef91d32c483cf2e379f5895..4b24236e3497ab67f2be5299163798a9f43e8667 100644 (file)
@@ -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<string> 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; i<groupMap->namesOfGroups.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; i<groupMap->namesOfGroups.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; i<groupMap->namesOfGroups.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<string>::iterator it;
                bool needToRun = false;
@@ -191,13 +212,20 @@ int ParseListCommand::execute(){
 
                }
                
+               if (m->control_pressed) { 
+                               delete input; delete groupMap;
+                               for (i=0; i<groupMap->namesOfGroups.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<string, string> 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<string, string> groupBins;
                        string bin = list->get(i); 
                        
                        vector<string> 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) {