/***********************************************************************/
FormatPhylipMatrix::FormatPhylipMatrix(string df) : filename(df) {
- openInputFile(filename, fileHandle);
+ m->openInputFile(filename, fileHandle);
}
/***********************************************************************/
//not using nameMap
-void FormatPhylipMatrix::read(NameAssignment* nameMap){
+int FormatPhylipMatrix::read(NameAssignment* nameMap){
try {
float distance;
string name;
ofstream out;
- fileHandle >> nseqs >> name;
+ string numTest;
+ fileHandle >> numTest >> name;
+
+ if (!m->isContainingOnlyDigits(numTest)) { m->mothurOut("[ERROR]: expected a number and got " + numTest + ", quitting."); m->mothurOutEndLine(); exit(1); }
+ else { convert(numTest, nseqs); }
+
list = new ListVector(nseqs);
list->set(0, name);
fileHandle.close(); //reset file
//open and get through numSeqs, code below formats rest of file
- openInputFile(filename, fileHandle);
- fileHandle >> nseqs; gobble(fileHandle);
+ m->openInputFile(filename, fileHandle);
+ fileHandle >> nseqs; m->gobble(fileHandle);
distFile = filename + ".rowFormatted";
- openOutputFile(distFile, out);
+ m->openOutputFile(distFile, out);
break;
}
if(d == '\n'){
ofstream outTemp;
string tempFile = filename + ".temp";
- openOutputFile(tempFile, outTemp);
+ m->openOutputFile(tempFile, outTemp);
//convert to square column matrix
for(int i=1;i<nseqs;i++){
+
fileHandle >> name;
list->set(i, name);
for(int j=0;j<i;j++){
+
+ if (m->control_pressed) { outTemp.close(); m->mothurRemove(tempFile); fileHandle.close(); delete reading; return 0; }
+
fileHandle >> distance;
if (distance == -1) { distance = 1000000; }
//format from square column to rowFormatted
//sort file by first column so the distances for each row are together
- string outfile = getRootName(tempFile) + "sorted.dist.temp";
+ string outfile = m->getRootName(tempFile) + "sorted.dist.temp";
//use the unix sort
- #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
+ #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
string command = "sort -n " + tempFile + " -o " + outfile;
system(command.c_str());
#else //sort using windows sort
system(command.c_str());
#endif
+ if (m->control_pressed) { m->mothurRemove(tempFile); m->mothurRemove(outfile); delete reading; return 0; }
//output to new file distance for each row and save positions in file where new row begins
ifstream in;
- openInputFile(outfile, in);
+ m->openInputFile(outfile, in);
distFile = outfile + ".rowFormatted";
- openOutputFile(distFile, out);
+ m->openOutputFile(distFile, out);
rowPos.resize(nseqs, -1);
int currentRow;
for(int k = 0; k < firstString.length(); k++) { in.putback(firstString[k]); }
while(!in.eof()) {
- in >> first >> second >> dist; gobble(in);
+ if (m->control_pressed) { in.close(); out.close(); m->mothurRemove(tempFile); m->mothurRemove(distFile); m->mothurRemove(outfile); delete reading; return 0; }
+
+ in >> first >> second >> dist; m->gobble(in);
if (first != currentRow) {
//save position in file of each new row
in.close();
out.close();
- remove(tempFile.c_str());
- remove(outfile.c_str());
+ m->mothurRemove(tempFile);
+ m->mothurRemove(outfile);
+
+ if (m->control_pressed) { m->mothurRemove(distFile); delete reading; return 0; }
+
}
else{ //square matrix convert directly to formatted row file
int index = nseqs;
list->set(i, name);
for(int j=0;j<nseqs;j++){
+ if (m->control_pressed) { fileHandle.close(); out.close(); m->mothurRemove(distFile); delete reading; return 0; }
+
fileHandle >> distance;
if (distance == -1) { distance = 1000000; }
reading->update(index);
}
- gobble(fileHandle);
+ m->gobble(fileHandle);
//save position in file of each new row
rowPos[i] = out.tellp();
}
reading->finish();
delete reading;
-
- list->setLabel("0");
fileHandle.close();
out.close();
+ if (m->control_pressed) { m->mothurRemove(distFile); return 0; }
+
+ list->setLabel("0");
+
+ return 1;
+
+
}
catch(exception& e) {
- errorOut(e, "FormatPhylipMatrix", "read");
+ m->errorOut(e, "FormatPhylipMatrix", "read");
exit(1);
}
}