/** * Parses from a given fileInputStream and reinitializes this student. * Expecting \t as sepeartor between the values and \n between students. * Reads only one student * @param istr InputStream to read from. */ void Student::readf(istream& ifstr) { // fetch block-wise char* buffer = new char[64]; // read block ifstr.read(buffer, 64); string* data = new string[4](); unsigned int stopIndex = 0; unsigned int startIndex = 0; string carry(); for (unsigned int i = 0; i < 4; i++) { while (!ifstr.eof()) { string input = buffer; input.append(carry); startIndex = stopIndex; if (i == 4) { stopIndex = input.find_first_of("\n",startIndex); } else { stopIndex = input.find_first_of("\t",startIndex); } if (stopIndex != string::npos) { data[i] = input.substr(startIndex, stopIndex); carry = string(); input = string(); stopIndex = 0; } else { carry.append(buffer); } } } regNum = parseRegNr(data[0]); fname = data[1]; lname = data[2]; birth = data[3]; free(buffer); }