void importEpitope(RunParameters &r) {
- FILE *input=fopen(r.epitopeInfile.c_str(),"r"); // <infile>.st
- if (input == NULL) { perror((std::string("ERROR in importEpitope: ") + r.epitopeInfile).c_str()); exit(1); }
-
- char o;
- //double frac;
- unsigned int site;
-
- // Import targeted epitope
-
- while (fscanf(input,"%u",&site)==1) {
-
- std::cout << site; // XXX
-
- std::vector<unsigned int> tempEp;
-
- tempEp.push_back(site);
- //r.eWT.push_back(site);
-
- while (fscanf(input,"%c",&o) == 1) {
- std::cout << o; // XXX
-
- if (fscanf(input,"%u",&site)==1) {
- std::cout << site; // XXX
- tempEp.push_back(site);
- }
- else {
+ std::ifstream input(r.epitopeInfile.c_str()); // <infile>.st
+ if (!input) { perror((std::string("ERROR in importEpitope: ") + r.epitopeInfile).c_str()); exit(1); }
+
+ std::string readStr;
+ while (std::getline(input,readStr)) {
+
+ std::string word;
+ unsigned int site;
+ std::vector<unsigned int> tmpEp;
+ size_t pos0 = 0;
+ size_t posBar = readStr.find('|',pos0);
+ size_t posEnd = std::string::npos; //readStr.size();
+
+ // could use std::noskipws to keep tab ('\t') characters?
+
+ std::stringstream readStrStrm(std::string(readStr,pos0,posBar-pos0));
+ while (readStrStrm >> word) {
+ std::cout << word << " ";
+ std::istringstream i(word);
+ if (i >> site)
+ tmpEp.push_back(site);
+ else // must have encountered '|'
break;
- }
}
+ r.eWT.push_back(tmpEp);
- r.eWT.push_back(tempEp);
+ tmpEp.clear(); // reset temp epitope
+ readStrStrm.str(""); readStrStrm.clear(); // reset stream
- if (fscanf(input,"%c",&o) != 1 || o != '|') { std::cout<<((std::string("ERROR in parsing importEpitope: ") + r.epitopeInfile).c_str()); exit(1); }
- std::cout << o; // XXX
- if (fscanf(input,"%c",&o) != 1 || o != '\t') { std::cout<<((std::string("ERROR2 in parsing importEpitope: ") + r.epitopeInfile).c_str()); exit(1); }
- std::cout << o; // XXX;
+ std::cout << "| ";
- tempEp.clear();
-
- while (fscanf(input,"%u",&site)==1) {
-
- std::cout << site; // XXX
-
- tempEp.push_back(site);
- //r.eMut.push_back(site);
-
- fscanf(input,"%c",&o);
- std::cout << o; // XXX
- if (o=='\n') break;
-
+ readStrStrm.str(std::string(readStr,posBar+1,posEnd/*-posBar-1*/));
+ while (readStrStrm >> word) {
+ std::cout << word << " ";
+ std::istringstream i(word);
+ if (i >> site)
+ tmpEp.push_back(site);
+ else
+ break;
}
-
- r.eMut.push_back(tempEp);
+ r.eMut.push_back(tmpEp);
r.numEpitopes++;
- //if (o=='\n') break;
+ std::cout << "\n";
}