00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "gn/gnStringTools.h"
00013
00014 void BaseCount(const string& bases, gnSeqI& a_count, gnSeqI& c_count, gnSeqI& g_count, gnSeqI& t_count, gnSeqI& other_count){
00015 a_count = 0;
00016 c_count = 0;
00017 g_count = 0;
00018 t_count = 0;
00019 other_count = 0;
00020 for(uint32 i=0; i < bases.length(); i++){
00021 if((bases[i] == 'a')||(bases[i] == 'A'))
00022 a_count++;
00023 else if((bases[i] == 'c')||(bases[i] == 'C'))
00024 c_count++;
00025 else if((bases[i] == 'g')||(bases[i] == 'G'))
00026 g_count++;
00027 else if((bases[i] == 't')||(bases[i] == 'T'))
00028 t_count++;
00029 else
00030 other_count++;
00031 }
00032 }
00033
00034
00035 unsigned int removeSpace(string &str)
00036 {
00037 bool onSpace = true;
00038 unsigned int nbrSpace = 0;
00039 bool containsReturn = false;
00040 unsigned int i;
00041 for( i = str.length(); i > 0 ; i--)
00042 {
00043 if( isspace(str[i-1]) )
00044 {
00045 nbrSpace++;
00046 if( (str[i-1] == '\n') || (str[i-1] == '\r') )
00047 containsReturn = true;
00048 onSpace = true;
00049 }
00050 else
00051 {
00052 onSpace = false;
00053 if( nbrSpace > 0 )
00054 {
00055 str.erase( i, nbrSpace-1);
00056 str[i] = (containsReturn?'\n':' ');
00057 }
00058 containsReturn = false;
00059 nbrSpace = 0;
00060 }
00061 }
00062 if( nbrSpace > 0 )
00063 {
00064 str.erase( i, nbrSpace);
00065 }
00066 if( str.length() > 0 )
00067 {
00068 if( isspace(str[str.length()-1]) ) str.erase(str.length()-1, 1);
00069 }
00070 return nbrSpace;
00071 }
00072
00073 void removeEndSpace(string &str)
00074 {
00075 unsigned int nbrSpace = 0;
00076 unsigned int i;
00077 for( i = str.length()-1; i > 0 ; i--)
00078 {
00079 if( !isSpace(str[i]) )
00080 break;
00081 nbrSpace++;
00082 }
00083 if( i != str.length() )
00084 {
00085 str.erase(i+1, nbrSpace);
00086 }
00087 }
00088
00089
00090 bool isNewLine(char ch)
00091 {
00092 if( (ch == '\n') || (ch == '\r') )
00093 {
00094 return true;
00095 }
00096 return false;
00097 }
00098
00099 bool isWhiteSpace(char ch)
00100 {
00101 if( (ch == ' ') || (ch == '\t') )
00102 {
00103 return true;
00104 }
00105 return false;
00106 }
00107
00108 bool isSpace(char ch)
00109 {
00110 if( isWhiteSpace(ch) || isNewLine(ch) )
00111 {
00112 return true;
00113 }
00114 return false;
00115 }
00116
00117 string uintToString(unsigned int value)
00118 {
00119 string str = "";
00120 char ch = '\0';
00121 unsigned int b = 0;
00122 if( value == 0 )
00123 str = "0";
00124 while( value != 0 )
00125 {
00126 b = value % 10;
00127 value /= 10;
00128 ch = b + 48;
00129 str = ch + str;
00130 }
00131 return str;
00132 }
00133 string ulongToString(unsigned long value)
00134 {
00135 string str = "";
00136 char ch = '\0';
00137 unsigned long b = 0;
00138 if( value == 0 )
00139 str = "0";
00140 while( value != 0 )
00141 {
00142 b = value % 10;
00143 value /= 10;
00144 ch = b + 48;
00145 str = ch + str;
00146 }
00147 return str;
00148 }
00149
00150 unsigned int parseValue(string &valueString)
00151 {
00152 unsigned int retValue = 0;
00153 unsigned int length = valueString.length();
00154 for( unsigned int i=0; i < length; i++)
00155 {
00156 retValue = (retValue * 10) + (valueString[i] - '0');
00157 }
00158 return retValue;
00159 }
00160
00161 int parseUintValue(string &valueString)
00162 {
00163 int retValue = 0;
00164 unsigned int length = valueString.length();
00165 for( unsigned int i=0; i < length; i++)
00166 {
00167 if( isdigit( valueString[i] ) )
00168 {
00169 retValue = (retValue * 10) + (valueString[i] - '0');
00170 }
00171 else
00172 break;
00173 }
00174 return retValue;
00175 }
00176
00177 int parseIntValue(string &valueString)
00178 {
00179 int sign = 1;
00180 int retValue = 0;
00181 unsigned int length = valueString.length();
00182 unsigned int i=0;
00183 for( ; i < length; i++)
00184 {
00185 if( valueString[i] == '-' )
00186 {
00187 sign = -1;
00188 break;
00189 }
00190 else if( isdigit( valueString[i] ) )
00191 {
00192 retValue = (retValue * 10) + sign * (valueString[i] - '0');
00193 break;
00194 }
00195 }
00196 i++;
00197 for( ; i < length; i++)
00198 {
00199 if( isdigit( valueString[i] ) )
00200 {
00201 retValue = (retValue * 10) + sign * (valueString[i] - '0');
00202 }
00203 else
00204 break;
00205 }
00206 return retValue;
00207 }
00208
00209 vector< string > tokenizeString( const string &str, char delimiter )
00210 {
00211 return tokenizeString( str.c_str(), str.length(), delimiter );
00212 }
00213
00214 vector< string > tokenizeString( const char* str, unsigned int len, char delimiter )
00215 {
00216 unsigned int lastIndex = 0 ;
00217 vector< string > tokenizeVector;
00218 unsigned int i=0;
00219 for( i = 0; i < len ; ++i )
00220 {
00221 if( str[i] == delimiter )
00222 {
00223 if( i > (lastIndex + 1) )
00224 {
00225 tokenizeVector.push_back( string( str + lastIndex, i - lastIndex ) );
00226 }
00227 lastIndex = i + 1;
00228 }
00229 }
00230 if( i > (lastIndex + 1) )
00231 {
00232 tokenizeVector.push_back( string( str + lastIndex, i - lastIndex ) );
00233 }
00234 return tokenizeVector;
00235 }
00236
00237
00238 void standarizePathString( string &oFileName )
00239 {
00240 unsigned int len = oFileName.size();
00241 for( unsigned int i=0; i < len ; ++i )
00242 {
00243 if( oFileName[i] == '\\' )
00244 oFileName[i] = '/';
00245 }
00246 }
00247 string getPathString( string oFileName )
00248 {
00249 string::size_type i = oFileName.rfind('/');
00250 if( i != string::npos )
00251 oFileName.erase(i+1, oFileName.length() - (i+1));
00252
00253
00254 return oFileName;
00255 }
00256 string getFileString( string oFileName )
00257 {
00258 string::size_type i = oFileName.rfind('/');
00259 if( i != string::npos )
00260 oFileName.erase(0, i + 1);
00261 return oFileName;
00262 }
00263 string getExtString( string oFileName )
00264 {
00265 string::size_type i = oFileName.rfind('.');
00266 if( i != string::npos )
00267 oFileName.erase( 0, i+1);
00268
00269
00270 return oFileName;
00271 }
00272
00273 string getFileNoExtString( string oFileName )
00274 {
00275 string::size_type i = oFileName.rfind('/');
00276 if( i != string::npos )
00277 oFileName.erase(0, i + 1);
00278 i = oFileName.rfind('.');
00279 if( i != string::npos )
00280 oFileName.erase( i, string::npos);
00281 return oFileName;
00282 }