X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mothurout.cpp;h=27b36ce5ff83dceadeb77e84045caef94d5168c9;hb=0486bc2eed084ac387d2f59b6d23d13b2382daf7;hp=de6da8c217a36a17368be48c21a7116d36a43108;hpb=6cf9539162b0fb0b5c0b99673e999df3cd717c55;p=mothur.git diff --git a/mothurout.cpp b/mothurout.cpp index de6da8c..27b36ce 100644 --- a/mothurout.cpp +++ b/mothurout.cpp @@ -9,6 +9,7 @@ #include "mothurout.h" + /******************************************************/ MothurOut* MothurOut::getInstance() { if( _uniqueInstance == 0) { @@ -359,18 +360,21 @@ string MothurOut::getline(ifstream& fileHandle) { } /***********************************************************************/ +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) #ifdef USE_COMPRESSION inline bool endsWith(string s, const char * suffix){ size_t suffixLength = strlen(suffix); return s.size() >= suffixLength && s.substr(s.size() - suffixLength, suffixLength).compare(suffix) == 0; } #endif +#endif string MothurOut::getRootName(string longName){ try { string rootName = longName; +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) #ifdef USE_COMPRESSION if (endsWith(rootName, ".gz") || endsWith(rootName, ".bz2")) { int pos = rootName.find_last_of('.'); @@ -378,7 +382,7 @@ string MothurOut::getRootName(string longName){ cerr << "shortening " << longName << " to " << rootName << "\n"; } #endif - +#endif if(rootName.find_last_of(".") != rootName.npos){ int pos = rootName.find_last_of('.')+1; rootName = rootName.substr(0, pos); @@ -485,6 +489,7 @@ bool MothurOut::isBlank(string fileName){ //check for blank file gobble(fileHandle); if (fileHandle.eof()) { fileHandle.close(); return true; } + fileHandle.close(); } return false; } @@ -522,7 +527,7 @@ string MothurOut::getFullPathName(string fileName){ newFileName = homeDir + fileName.substr(fileName.find("~")+1); return newFileName; }else { //find path - if (path.rfind("./") == -1) { return fileName; } //already complete name + if (path.rfind("./") == string::npos) { return fileName; } //already complete name else { newFileName = fileName.substr(fileName.rfind("./")+2); } //save the complete part of the name //char* cwdpath = new char[1024]; @@ -542,7 +547,7 @@ string MothurOut::getFullPathName(string fileName){ //break apart the current working directory vector dirs; - while (simpleCWD.find_first_of('/') != -1) { + while (simpleCWD.find_first_of('/') != string::npos) { string dir = simpleCWD.substr(0,simpleCWD.find_first_of('/')); simpleCWD = simpleCWD.substr(simpleCWD.find_first_of('/')+1, simpleCWD.length()); dirs.push_back(dir); @@ -553,7 +558,7 @@ string MothurOut::getFullPathName(string fileName){ int index = dirs.size()-1; - while((pos = path.rfind("./")) != -1) { //while you don't have a complete path + while((pos = path.rfind("./")) != string::npos) { //while you don't have a complete path if (pos == 0) { break; //you are at the end }else if (path[(pos-1)] == '.') { //you want your parent directory ../ path = path.substr(0, pos-1); @@ -573,12 +578,12 @@ string MothurOut::getFullPathName(string fileName){ return newFileName; } #else - if (path.find("~") != -1) { //go to home directory + if (path.find("~") != string::npos) { //go to home directory string homeDir = getenv ("HOMEPATH"); newFileName = homeDir + fileName.substr(fileName.find("~")+1); return newFileName; }else { //find path - if (path.rfind(".\\") == -1) { return fileName; } //already complete name + if (path.rfind(".\\") == string::npos) { return fileName; } //already complete name else { newFileName = fileName.substr(fileName.rfind(".\\")+2); } //save the complete part of the name char *cwdpath = NULL; @@ -599,7 +604,7 @@ string MothurOut::getFullPathName(string fileName){ int index = dirs.size()-1; - while((pos = path.rfind(".\\")) != -1) { //while you don't have a complete path + while((pos = path.rfind(".\\")) != string::npos) { //while you don't have a complete path if (pos == 0) { break; //you are at the end }else if (path[(pos-1)] == '.') { //you want your parent directory ../ path = path.substr(0, pos-1); @@ -632,7 +637,7 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle, string m){ try { //get full path name string completeFileName = getFullPathName(fileName); - +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) #ifdef USE_COMPRESSION // check for gzipped or bzipped file if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) { @@ -655,9 +660,10 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle, string m){ } } #endif - +#endif fileHandle.open(completeFileName.c_str()); if(!fileHandle) { + //mothurOut("[ERROR]: Could not open " + completeFileName); mothurOutEndLine(); return 1; }else { //check for blank file @@ -677,7 +683,7 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle){ //get full path name string completeFileName = getFullPathName(fileName); - +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) #ifdef USE_COMPRESSION // check for gzipped or bzipped file if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) { @@ -700,7 +706,7 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle){ } } #endif - +#endif fileHandle.open(completeFileName.c_str()); if(!fileHandle) { @@ -755,7 +761,7 @@ int MothurOut::openOutputFile(string fileName, ofstream& fileHandle){ try { string completeFileName = getFullPathName(fileName); - +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) #ifdef USE_COMPRESSION // check for gzipped file if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) { @@ -775,7 +781,7 @@ int MothurOut::openOutputFile(string fileName, ofstream& fileHandle){ } } #endif - +#endif fileHandle.open(completeFileName.c_str(), ios::trunc); if(!fileHandle) { mothurOut("[ERROR]: Could not open " + completeFileName); mothurOutEndLine(); @@ -801,6 +807,7 @@ void MothurOut::appendFiles(string temp, string filename) { //open output file in append mode openOutputFileAppend(filename, output); int ableToOpen = openInputFile(temp, input, "no error"); + //int ableToOpen = openInputFile(temp, input); if (ableToOpen == 0) { //you opened it while(char c = input.get()){ @@ -920,7 +927,7 @@ vector MothurOut::setFilePosFasta(string filename, int& num) in.seekg(size); - while(char c = in.get()){ + while(in.get()){ if(in.eof()) { break; } else { size++; } } @@ -1038,7 +1045,7 @@ vector MothurOut::divideFile(string filename, int& proc) { //sanity check filePos for (int i = 0; i < (filePos.size()-1); i++) { - if (filePos[(i+1)] <= filePos[i]) { cout << "erasing " << (i+1) << endl; filePos.erase(filePos.begin()+(i+1)); i--; } + if (filePos[(i+1)] <= filePos[i]) { filePos.erase(filePos.begin()+(i+1)); i--; } } proc = (filePos.size() - 1); @@ -1149,7 +1156,90 @@ vector > MothurOut::binomial(int maxOrder){ exit(1); } } - +/**************************************************************************************************/ +unsigned int MothurOut::fromBase36(string base36){ + try { + unsigned int num = 0; + + map converts; + converts['A'] = 0; + converts['a'] = 0; + converts['B'] = 1; + converts['b'] = 1; + converts['C'] = 2; + converts['c'] = 2; + converts['D'] = 3; + converts['d'] = 3; + converts['E'] = 4; + converts['e'] = 4; + converts['F'] = 5; + converts['f'] = 5; + converts['G'] = 6; + converts['g'] = 6; + converts['H'] = 7; + converts['h'] = 7; + converts['I'] = 8; + converts['i'] = 8; + converts['J'] = 9; + converts['j'] = 9; + converts['K'] = 10; + converts['k'] = 10; + converts['L'] = 11; + converts['l'] = 11; + converts['M'] = 12; + converts['m'] = 12; + converts['N'] = 13; + converts['n'] = 13; + converts['O'] = 14; + converts['o'] = 14; + converts['P'] = 15; + converts['p'] = 15; + converts['Q'] = 16; + converts['q'] = 16; + converts['R'] = 17; + converts['r'] = 17; + converts['S'] = 18; + converts['s'] = 18; + converts['T'] = 19; + converts['t'] = 19; + converts['U'] = 20; + converts['u'] = 20; + converts['V'] = 21; + converts['v'] = 21; + converts['W'] = 22; + converts['w'] = 22; + converts['X'] = 23; + converts['x'] = 23; + converts['Y'] = 24; + converts['y'] = 24; + converts['Z'] = 25; + converts['z'] = 25; + converts['0'] = 26; + converts['1'] = 27; + converts['2'] = 28; + converts['3'] = 29; + converts['4'] = 30; + converts['5'] = 31; + converts['6'] = 32; + converts['7'] = 33; + converts['8'] = 34; + converts['9'] = 35; + + int i = 0; + while (i < base36.length()) { + char c = base36[i]; + num = 36 * num + converts[c]; + i++; + } + + return num; + + } + catch(exception& e) { + errorOut(e, "MothurOut", "fromBase36"); + exit(1); + } +} /***********************************************************************/ int MothurOut::factorial(int num){ @@ -1215,17 +1305,6 @@ void MothurOut::splitAtChar(string& estim, vector& container, char symbo } container.push_back(individual); - /* - - while (estim.find_first_of(symbol) != -1) { - individual = estim.substr(0,estim.find_first_of(symbol)); - if ((estim.find_first_of(symbol)+1) <= estim.length()) { //checks to make sure you don't have dash at end of string - estim = estim.substr(estim.find_first_of(symbol)+1, estim.length()); - container.push_back(individual); - } - } - //get last one - container.push_back(estim); */ } catch(exception& e) { errorOut(e, "MothurOut", "splitAtChar"); @@ -1460,20 +1539,21 @@ bool MothurOut::anyLabelsToProcess(string label, set& userLabels, string } //go through users set and make them floats - for(it = userLabels.begin(); it != userLabels.end(); ++it) { + for(it = userLabels.begin(); it != userLabels.end();) { float temp; if ((*it != "unique") && (convertTestFloat(*it, temp) == true)){ convert(*it, temp); orderFloat.push_back(temp); userMap[*it] = temp; + it++; }else if (*it == "unique") { orderFloat.push_back(-1.0); userMap["unique"] = -1.0; + it++; }else { - if (errorOff == "") { cout << *it << " is not a valid label." << endl; } - userLabels.erase(*it); - it--; + if (errorOff == "") { mothurOut(*it + " is not a valid label."); mothurOutEndLine(); } + userLabels.erase(it++); } } @@ -1489,11 +1569,11 @@ bool MothurOut::anyLabelsToProcess(string label, set& userLabels, string if (orderFloat[i] < labelFloat) { smaller = true; if (orderFloat[i] == -1) { - if (errorOff == "") { cout << "Your file does not include the label unique." << endl; } + if (errorOff == "") { mothurOut("Your file does not include the label unique."); mothurOutEndLine(); } userLabels.erase("unique"); } else { - if (errorOff == "") { cout << "Your file does not include the label " << endl; } + if (errorOff == "") { mothurOut("Your file does not include the label "); mothurOutEndLine(); } string s = ""; for (it2 = userMap.begin(); it2!= userMap.end(); it2++) { if (it2->second == orderFloat[i]) { @@ -1503,7 +1583,7 @@ bool MothurOut::anyLabelsToProcess(string label, set& userLabels, string break; } } - if (errorOff == "") {cout << s << ". I will use the next smallest distance. " << endl; } + if (errorOff == "") {mothurOut( s + ". I will use the next smallest distance. "); mothurOutEndLine(); } } //since they are sorted once you find a bigger one stop looking }else { break; }